Jump to content

[AJUDA] Salvar informações na conta do jogador


Recommended Posts

Olá galera tudo bem? to editando um script de identidade, onde basicamente o jogador coloca seu nome, data de nascimento e local de nascimento, no entanto, quando o jogador sai do servidor nada disso fica salvo na conta dele, ele precisa novamente ter que emitir a identidade, como posso fazer as informações fiquem salvas na conta dele? (Identidade:Nome - Identidade:Idade - Identidade:Local)

Client:

local screenW,screenH = guiGetScreenSize()
local resW, resH = 1024,768
local x, y = (screenW/resW), (screenH/resH)

Texto = {
    msg = {}
}
    Texto.msg[1] = guiCreateEdit(x*360, y*315, x*200, y*27, "", false)
    Texto.msg[2] = guiCreateEdit(x*360, y*365, x*200, y*27, "", false)
    Texto.msg[3] = guiCreateEdit(x*360, y*415, x*200, y*27, "", false)    

    guiSetVisible ( Texto.msg[1], false )
    guiSetVisible ( Texto.msg[2], false )
    guiSetVisible ( Texto.msg[3], false )

    function ConfigurarBrancos ()
    if Painel == true then
        Nome = guiGetText(Texto.msg[1])
        Idade = guiGetText(Texto.msg[2])
        Local = guiGetText(Texto.msg[3])
    end
end
setTimer ( ConfigurarBrancos, 50, 0 )

function Identidade()
	local RG = getElementData(localPlayer, "ID") or "0"
	local Brito_RGNumero = getElementData ( localPlayer, "IDs" ) or "Erro "
        Cor = tocolor(218, 218, 218, 255)
        if isCursorOnElement(x*579, y*529, x*101, y*28) then
        Cor = tocolor(0,100,200,150)
    end
	    dxDrawImage(375, 70, 438, 424, "gfx/bg.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
       -- dxDrawRectangle(x*350, y*184, x*342, y*394, tocolor(238, 238, 238, 255), false)
  --      dxDrawText("Identidade BNC", x*350, y*184, x*692, y*207, tocolor(0, 138, 244, 255), x*1.20, "sans", "center", "center", false, false, false, false, false)
   --     dxDrawText("Olá, seja bem vindo(a) ao Brasil Nacional City\nAqui é onde você vai preencher sua identidade\n\nOBS: Não será possível preencher novamente,\npreencha corretamente ou poderá ser preso.", x*356, y*217, x*698, y*240, tocolor(0, 138, 244, 255), 1.10, "sans", "left", "top", false, false, false, false, false)
        dxDrawRectangle(x*579, y*529, x*101, y*28, Cor, false)
        dxDrawText("EMITIR", x*580, y*529, x*680, y*557, tocolor(255, 255, 255, 255), x*1.00, "sans", "center", "center", false, false, false, false, false)
        dxDrawText("Pressione 'Enter' para fechar", x*348, y*580, x*692, x*597, tocolor(255, 255, 255, 255), x*1.00, "default", "center", "top", false, false, false, false, false)
	 dxDrawText(""..RG.."", 89, 225, 777, 594, tocolor(0, 128, 0, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false)
	 dxDrawText(""..Brito_RGNumero.."", 285, -115, 777, 594, tocolor(0, 128, 0, 255), 1.00, "default-bold", "center", "center", false, false, false, false, false)
   --     dxDrawText("Nomes irregulares e ofensivos\npoderão ocasionar em prisões ou\naté mesmo banimentos.", x*360, y*447, x*670, y*497, tocolor(255, 95, 95, 255), x*1.00, "sans", "center", "center", false, false, false, false, false)
end

Painel = false
function Abrir()
    if Painel == false then
    toggleAllControls(false)
    showChat(false)
    showCursor ( true )
    addEventHandler ( "onClientRender", root, Identidade )
    guiSetVisible ( Texto.msg[1], true )
    guiSetVisible ( Texto.msg[2], true )
    guiSetVisible ( Texto.msg[3], true )
    Painel = true
end
end
addEvent("Open:Identidade",true)
addEventHandler("Open:Identidade",root,Abrir)

function Fechar()
     if Painel then
     toggleAllControls(true)
    showChat(true)
    showCursor ( false )
    removeEventHandler ( "onClientRender", root, Identidade )
    guiSetVisible ( Texto.msg[1], false )
    guiSetVisible ( Texto.msg[2], false )
    guiSetVisible ( Texto.msg[3], false )
    Painel = false
end
end
addCommandHandler("fecharp",Fechar)
bindKey("enter","down","fecharp")

function outputEditBox ( button )
    if button == "left" then
        guiSetText(Texto.msg[1],"")
    end
end
addEventHandler ( "onClientGUIClick", Texto.msg[1], outputEditBox)

function outputEditBox ( button )
    if button == "left" then
        guiSetText(Texto.msg[2],"")
    end
end
addEventHandler ( "onClientGUIClick", Texto.msg[2], outputEditBox)

function outputEditBox ( button )
    if button == "left" then
        guiSetText(Texto.msg[3],"")
    end
end
addEventHandler ( "onClientGUIClick", Texto.msg[3], outputEditBox)

function ConfirmarContinuar (_,state)
if Painel == true then
if state == "down" then
if isCursorOnElement (x*579, y*529, x*101, y*28) then
if guiGetText(Nome) == "" then
return
else
if guiGetText(Nome) == "" then
return
else
if guiGetText(Idade) == "" then
return
else
if guiGetText(Idade) == "" then
return
else
if guiGetText(Local) == "" then
return
else
if guiGetText(Local) == "" then
return
else
setElementData ( localPlayer, "Identidade:Nome", Nome)
setElementData ( localPlayer, "Identidade:Idade",Idade)
setElementData ( localPlayer, "Identidade:Local", Local)

toggleAllControls(true)
    showChat(true)
    showCursor ( false )
    removeEventHandler ( "onClientRender", root, Identidade )
    guiSetVisible ( Texto.msg[1], false )
    guiSetVisible ( Texto.msg[2], false )
    guiSetVisible ( Texto.msg[3], false )
    Painel = false
    outputChatBox("[PARABÉNS] VOCÊ REALIZOU COM SUCESSO A EMISSÃO DA SUA CARTEIRA DE IDENTIDADE",0,255,0)
end
end
end
end
end
end
end
end
end
end
addEventHandler ( "onClientClick", root, ConfirmarContinuar )

function isCursorOnElement( x,y,w,h )
local mx,my = getCursorPosition ()
local fullx,fully = guiGetScreenSize()
cursorx,cursory = mx*fullx,my*fully
if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then
return true
else
return false
end
end

Server:

Entrada = createMarker(1183.8770751953,-1234.6398925781,19.155364990234-1,"cylinder",2,255,255,255,0)
Saida = createMarker(1183.5395507813,-1239.0718994141,18.603658676147-1,"cylinder",2,255,255,255,0)
MIdentidade = createMarker(1181.6715087891,-1221.7287597656,19.155364990234 -1,"cylinder",1.1,0,100,200,0)
MTrabalho = createMarker(1181.5675048828,-1225.3601074219,19.155364990234 -1,"cylinder",1.1,0,100,200,0)
MAgencia = createMarker(1174.1483154297,-1220.9399414063,19.155364990234 -1,"cylinder",1.1,0,100,200,0)

function Entrar(thePlayer)
	triggerClientEvent(thePlayer,"Entrou",thePlayer)
end
addEventHandler("onMarkerHit",Entrada,Entrar)

function Saiu(thePlayer)
	triggerClientEvent(thePlayer,"Saiu",thePlayer)
end
addEventHandler("onMarkerHit",Saida,Saiu)

function Identidade(thePlayer) 
local Serial = getPlayerSerial ( thePlayer )
setElementData ( thePlayer, "IDs", ""..Serial.."" )
	local Identidade = getElementData(thePlayer,"Identidade:Nome") or "N/C"
	if Identidade == "N/C" then
	triggerClientEvent(thePlayer,"Open:Identidade",thePlayer)
else
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ JÁ POSSUI RG EMITIDO!",thePlayer,255,255,255,true)
	return
end
end
addEventHandler("onMarkerHit",MIdentidade,Identidade)

function fadeCameraDelayed(player) 
    if (isElement(player)) then
        fadeCamera(player, true, 0.5)
    end
end

function Agencia(thePlayer)
	local account = getPlayerAccount (thePlayer)
	local Trabalho = getElementData(thePlayer,"Identidade:Trabalho") or "N/C"
    if isGuestAccount (account) then outputChatBox ( "Você não pode trabalhar deslogado, crie uma conta!", thePlayer, 255,0,0,true) return end
    if isElementWithinMarker(thePlayer, MAgencia) then
    if Trabalho == "N/C" then
    outputChatBox("#ff0000-> #ffffffVocê não tem uma carteira de trabalho.",thePlayer,255,255,255,true)
    return
else
	triggerClientEvent(thePlayer,"Hy:Abrir",thePlayer)	 
  end
end
end
addEventHandler("onMarkerHit",MAgencia,Agencia)

function Trabalho(thePlayer) 
	local Identidade = getElementData(thePlayer,"Identidade:Nome") or "N/C"
	local Trabalho = getElementData(thePlayer,"Identidade:Trabalho") or "N/C"
	if Identidade == "N/C" then
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ NÃO POSSUI RG!",thePlayer,255,255,255,true)
	return
	end
	if Trabalho == "N/C" then
	triggerClientEvent(thePlayer,"Open:Trabalho",thePlayer)
else
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ JÁ POSSUI CARTEIRA DE TRABALHO",thePlayer,255,255,255,true)
	return
end
end
addEventHandler("onMarkerHit",MTrabalho,Trabalho)

 

Link to comment
2 hours ago, Lord Henry said:

Está faltando um setAccountData aí no código pra salvar esses dados na conta dele.

E também um getAccountData pra depois obter esses dados da conta.

Deu certo, porém queria que caso o jogador ja tenha essas informações setadas, aparecesse a informação de que ele já tirou a identidade (LINHA 24), porém não tá funcionando! quando passo no marker ele abre o painel normalmente

 

Consegui dessa forma:

Entrada = createMarker(1183.8770751953,-1234.6398925781,19.155364990234-1,"cylinder",2,255,255,255,0)
Saida = createMarker(1183.5395507813,-1239.0718994141,18.603658676147-1,"cylinder",2,255,255,255,0)
MIdentidade = createMarker(1181.6715087891,-1221.7287597656,19.155364990234 -1,"cylinder",1.1,0,100,200,0)
MTrabalho = createMarker(1181.5675048828,-1225.3601074219,19.155364990234 -1,"cylinder",1.1,0,100,200,0)
MAgencia = createMarker(1174.1483154297,-1220.9399414063,19.155364990234 -1,"cylinder",1.1,0,100,200,0)

function Entrar(thePlayer)
	triggerClientEvent(thePlayer,"Entrou",thePlayer)
end
addEventHandler("onMarkerHit",Entrada,Entrar)

function Saiu(thePlayer)
	triggerClientEvent(thePlayer,"Saiu",thePlayer)
end
addEventHandler("onMarkerHit",Saida,Saiu)

function Identidade(thePlayer) 
local Serial = getPlayerSerial ( thePlayer )
setElementData ( thePlayer, "IDs", ""..Serial.."" )
	local Identidade = getElementData(thePlayer,"Identidade:Nome") or "N/C"
	if Identidade == "N/C" then
	triggerClientEvent(thePlayer,"Open:Identidade",thePlayer)
else
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ JÁ POSSUI RG EMITIDO!",thePlayer,255,255,255,true)
	return
end
end
addEventHandler("onMarkerHit",MIdentidade,Identidade)

function fadeCameraDelayed(player) 
    if (isElement(player)) then
        fadeCamera(player, true, 0.5)
    end
end

function Agencia(thePlayer)
	local account = getPlayerAccount (thePlayer)
	local Trabalho = getElementData(thePlayer,"Identidade:Trabalho") or "N/C"
    if isGuestAccount (account) then outputChatBox ( "Você não pode trabalhar deslogado, crie uma conta!", thePlayer, 255,0,0,true) return end
    if isElementWithinMarker(thePlayer, MAgencia) then
    if Trabalho == "N/C" then
    outputChatBox("#ff0000-> #ffffffVocê não tem uma carteira de trabalho.",thePlayer,255,255,255,true)
    return
else
	triggerClientEvent(thePlayer,"Hy:Abrir",thePlayer)	 
  end
end
end
addEventHandler("onMarkerHit",MAgencia,Agencia)

function Trabalho(thePlayer) 
	local Identidade = getElementData(thePlayer,"Identidade:Nome") or "N/C"
	local Trabalho = getElementData(thePlayer,"Identidade:Trabalho") or "N/C"
	if Identidade == "N/C" then
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ NÃO POSSUI RG!",thePlayer,255,255,255,true)
	return
	end
	if Trabalho == "N/C" then
	triggerClientEvent(thePlayer,"Open:Trabalho",thePlayer)
else
	outputChatBox("#ff0000ATENDENTE:#ffffff VOCÊ JÁ POSSUI CARTEIRA DE TRABALHO",thePlayer,255,255,255,true)
	return
end
end
addEventHandler("onMarkerHit",MTrabalho,Trabalho)

function Carregar_Dis ( conta )
	if not isGuestAccount ( conta ) then
		if conta then	
			local source = getAccountPlayer ( conta )
			local Name = getAccountData ( conta, "Identidade:Nome") or "N/C"
			local Idade = getAccountData ( conta, "Identidade:Idade") or "N/C"
			local Local = getAccountData ( conta, "Identidade:Local") or "N/C"
			local Trabalho = getAccountData ( conta, "Identidade:Trabalho") or "N/C"
			local Assinou = getAccountData ( conta, "Assinou:Trabalho") or "N/C"
			setElementData ( source, "Identidade:Nome", Name )
			setElementData ( source, "Identidade:Idade", Idade )
			setElementData ( source, "Identidade:Local", Local )
			setElementData ( source, "Identidade:Trabalho", Trabalho )
			setElementData ( source, "Assinou:Trabalho", Assinou )
		end
	end	
end


function Iniciar_Resource ( res )
	if res == getThisResource ( ) then
		for i, player in ipairs(getElementsByType("player")) do
			local acc = getPlayerAccount ( player )
			if not isGuestAccount ( acc ) then
				Carregar_Dis ( acc )
			end
		end
	end
end
addEventHandler ( "onResourceStart", getRootElement ( ), Iniciar_Resource )

function Salvar_Dis ( conta )
	if conta then
		local source = getAccountPlayer ( conta )
		local Name = getElementData ( source, "Identidade:Nome") or "N/C"
		local Idade = getElementData ( source, "Identidade:Idade") or "N/C"
		local Local = getElementData ( source, "Identidade:Local") or "N/C"
		local Trabalho = getElementData ( source, "Identidade:Trabalho") or "N/C"
		local Assinou = getElementData ( source, "Assinou:Trabalho") or "N/C"
		setAccountData ( conta, "Identidade:Nome", Name )
		setAccountData ( conta, "Identidade:Idade", Idade )
		setAccountData ( conta, "Identidade:Local", Local )
		setAccountData ( conta, "Identidade:Trabalho", Trabalho )
		setAccountData ( conta, "Assinou:Trabalho", Assinou )
	end
end

function Desligar_Dis ( res )
    if res == getThisResource ( ) then
		for i, player in ipairs(getElementsByType("player")) do
			local acc = getPlayerAccount ( player )
			if not isGuestAccount ( acc ) then
				Salvar_Dis ( acc )
			end
		end
	end
end 
addEventHandler ( "onResourceStop", getRootElement(), Desligar_Dis )

function Sair_Dis_Servidor ( quitType )
	local acc = getPlayerAccount(source)
	if not isGuestAccount ( acc ) then
		if acc then
			Salvar_Dis ( acc )
		end
	end
end
addEventHandler ( "onPlayerQuit", getRootElement(), Sair_Dis_Servidor )

 

Link to comment
On 11/08/2020 at 15:10, Welf said:

Alguem poderia ajudar?

Se vc já colocou setAccountData pra salvar os dados na conta como o Lord Henry disse acime, tenta colocar assim na linha 20:

local Identidade = getAccountData(getPlayerAccount(thePlayer),"Identidade:Nome") or "N/C"

 

Link to comment
On 12/08/2020 at 17:26, Boechat said:

Se vc já colocou setAccountData pra salvar os dados na conta como o Lord Henry disse acime, tenta colocar assim na linha 20:


local Identidade = getAccountData(getPlayerAccount(thePlayer),"Identidade:Nome") or "N/C"

 

Como eu poderia salvar as informações na conta do player quando ele saisse do Marker (MIdentidade) na linha 3?

Link to comment
9 hours ago, Welf said:

Como eu poderia salvar as informações na conta do player quando ele saisse do Marker (MIdentidade) na linha 3?

Quais dados exatamente você quer salvar? pelo que eu entendi, quando você entra no marker "MIdentidade" você tem a opção de salvar nome, idade e local, certo?

Pelo o que eu entendi, quando você encosta no marker abre uma janela que seta no ELEMENTO player os dados "Identidade:Nome", "Identidade:Idade" e "Identidade:Local"

Quando você sai do marker, seta na CONTA do jogador os valores que estão no ELEMENTO player.

function saveID (player)
  if getElementType (player) == 'player' then
    local Serial = getPlayerSerial ( player )
    setAccountData ( player, "IDs", Serial)
    setAccountData ( player, "Identidade:Nome", getElementData ( player, "Identidade:Nome"))
    setAccountData ( player, "Identidade:Idade", getElementData ( player, "Identidade:Idade"))
    setAccountData ( player, "Identidade:Local", getElementData ( player, "Identidade:Local"))
  end
end
addEventHandler( "onMarkerLeave", MIdentidade, saveID )

Note que dados salvos nos elementos, seja veículo, player etc. são perdidos quando deixam de existir, então quando você deslogar, os dados salvos no ELEMENTO player irão sumir, mas os dados salvos na CONTA estão salvos em um banco de dados.

Também te aconselho a colocar essa função aqui que sempre que o jogador logar, pega os dados salvos na CONTA dele e setam no ELEMENTO player, assim, se ele tentar criar a identidade novamente vai alegar que ele já a possui. Você também pode não colocar esse código a seguir mas teria que trocar os "setElementData" e "getElementData" por "setAccountData" e "getAccountData" em todo o código. Recomendo que faça isso, pois se fizer dispensa o código de login (que vou colocar a seguir) e também dispensa o código de salvar quando sair do marker, já que já vai salvar direto na conta assim que o player clicar pra confirmar e não no elemento pra depois "passar" pra conta, entende?

addEventHandler("onPlayerLogin", root,
  function(thePreviousAccount, theCurrentAccount)
    
    local Serial = getPlayerSerial (source)
    setElementData ( source, "IDs", Serial)
    setElementData ( source, "Identidade:Nome", getAccountData ( theCurrentAccount, "Identidade:Nome"))
    setElementData ( source, "Identidade:Idade", getAccountData ( theCurrentAccount, "Identidade:Idade"))
    setElementData ( source, "Identidade:Local", getAccountData ( theCurrentAccount, "Identidade:Local"))
  end)

Teste e veja se tá funcionando, se não estiver poste aqui o que mostra no /debugscript 3

Se ajudei deixa um Thanks aí em baixo ☺️

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