Jump to content

ElementData


Recommended Posts

Posted
local porte = createMarker (249.60247802734,68.466117858887,1003.640625, "cylinder", 1 , 255 ,255 ,255 ,50)
setElementDimension(porte, 1)
setElementInterior(porte, 6)

function comprarPorte (player, cmd)
	if isElementWithinMarker (player, porte) then
		if getElementData(player,"porte") then
			if getPlayerMoney (player) >= 30000 then
				takePlayerMoney (player,30000)
				giveElementData(player , "porte" , true)
				outputChatBox("[AVISO] Você comprou o porte de armas!",player,255,255,255)
			else
				outputChatBox("[AVISO] Você não tem dinheiro para o porte!",player,255,255,255)
		else
			outputChatBox("[AVISO] Você já tem o porte de armas!",player,255,255,255)
	else
		outputChatBox("[AVISO] Você não está na delegacia!",player,255,255,255)
			end
		end
	end
end	
addCommandHandler ("comprarporte", comprarPorte)

fiz este script de porte de armas , no caso o giveElementData seria o melhor para se usar? no caso de ser para sempre? 

Posted
1 minute ago, Jonas^ said:

De onde você tirou giveElementData?

no caso seria setElementData* ,erro.

 

1 minute ago, Jonas^ said:

setAccountData.

ok

local porte = createMarker (249.60247802734,68.466117858887,1003.640625, "cylinder", 1 , 255 ,255 ,255 ,50)
setElementDimension(porte, 1)
setElementInterior(porte, 6)

function comprarPorte (player, cmd)
	if isElementWithinMarker (player, porte) then
		if getElementData(player,"porte") then
			if getPlayerMoney (player) >= 30000 then
				takePlayerMoney (player,30000)
				setAccountData ( player,"porte", true)
				outputChatBox("[AVISO] Você comprou o porte de armas!",player,255,255,255)
			else
				outputChatBox("[AVISO] Você não tem dinheiro para o porte!",player,255,255,255)
		else
			outputChatBox("[AVISO] Você já tem o porte de armas!",player,255,255,255)
	else
		outputChatBox("[AVISO] Você não está na delegacia!",player,255,255,255)
			end
		end
	end
end	
addCommandHandler ("comprarporte", comprarPorte)

assim?

Posted (edited)

Não, setAccountData requer uma conta e não um elemento como argumento, e porque deixou a verificação de getElementData?

Edited by Jonas^
  • Thanks 1
Posted (edited)
local porte = createMarker (249.60247802734,68.466117858887,1002.640625, "cylinder", 1 , 255 ,255 ,255 ,50)
setElementDimension(porte, 1)
setElementInterior(porte, 6)

local acc = getPlayerAccount ( player )

function comprarPorte (player, cmd)
	if isElementWithinMarker (player, porte) then
		if getAccountData(acc,"porte")
			if getPlayerMoney (player) >= 30000 then
				takePlayerMoney (player,30000)
				setAccountData ( acc ,"porte", true)
				outputChatBox("[AVISO] Você comprou o porte de armas!",player,255,255,255)
			else
				outputChatBox("[AVISO] Você não tem dinheiro para o porte!",player,255,255,255)
		else
			outputChatBox("[AVISO] Você já tem o porte de armas!",player,255,255,255)
	else
		outputChatBox("[AVISO] Você não está na delegacia!",player,255,255,255)
			end
		end
	end
end	
addCommandHandler ("comprarporte", comprarPorte)

desse jeito?

Edited by Renazz
Posted (edited)
addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getAccountData (getPlayerAccount(player), "porte") then -- Se o jogador não estiver com a account-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					setAccountData (getPlayerAccount(player), "porte", true) -- Seta a account-data na conta do jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 255, 255, 255)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 255, 255)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 255, 255)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 255, 255)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 255, 255)
	end	
end)

@Renazz

Edited by Jonas^
Adicionando verificação se o jogador estiver deslogado/logado pois se trata de account-data é necessário o jogador estar logado.
  • Thanks 1
Posted (edited)
local porte = createMarker (250.04884338379,67.623962402344,1003.640625, "cylinder", 1 , 255 ,255 ,255 ,50)
setElementInterior(porte,6)
setElementDimension(porte,1)

addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getAccountData (getPlayerAccount(player), "porte") then -- Se o jogador não estiver com a account-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					setAccountData (getPlayerAccount(player), "porte", true) -- Seta a account-data na conta do jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 255, 255, 255)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 255, 255)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 255, 255)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 255, 255)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 255, 255)
	end	
end)

agora o marker não está aparecendo de nenhum jeito, tentei colocar fora do interior e ele não apareceu.

Edited by Renazz
Posted
18 minutes ago, Renazz said:

local porte = createMarker (250.04884338379,67.623962402344,1003.640625, "cylinder", 1 , 255 ,255 ,255 ,50)
setElementInterior(porte,6)
setElementDimension(porte,1)

addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getAccountData (getPlayerAccount(player), "porte") then -- Se o jogador não estiver com a account-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					setAccountData (getPlayerAccount(player), "porte", true) -- Seta a account-data na conta do jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 255, 255, 255)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 255, 255)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 255, 255)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 255, 255)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 255, 255)
	end	
end)

agora o marker não está aparecendo de nenhum jeito, tentei colocar fora do interior e ele não apareceu.

/debugscript 3 me diga oque mostra ao restartar o resouce

  • Thanks 1
Posted

O código está certo posso te afirmar isso, seu problema é no meta, mas por via das dúvidas copie o código de novo:

local porte = createMarker (249.60, 68.46, 1002.64, "cylinder", 1, 255, 255, 255, 50)
setElementDimension (porte, 1)
setElementInterior (porte, 6)

addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getAccountData (getPlayerAccount(player), "porte") then -- Se o jogador não estiver com a account-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					setAccountData (getPlayerAccount(player), "porte", true) -- Seta a account-data na conta do jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 0, 255, 0)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 30, 30)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 30, 30)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 30, 30)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 30, 30)
	end	
end)

Meta:

<meta>
	<script src="server.lua" type="server"/>
</meta>

 

  • Thanks 1
Posted (edited)

Ali no meu comentário na linha 9 ta errado, é -- Se o jogador tiver, maior ou igual a 30k, então:

6 minutes ago, Renazz said:

agora foi!

xD

Edited by Jonas^
  • Thanks 1
Posted

opa , voltando ao assunto o meu script de revistar para pegar se o player tem o porte é neccessário usar o getElementData

local Porte = tonumber(getElementData(Jogador , "porte")) or 0

	if Porte > 1 then
        dxDrawText("Porte de Armas: (#00ff00X#ffffff)", x*748, y*269, x*832, y*284, tocolor(255, 255, 255, 255), x*1.00, Font_5, "left", "top", false, false, false, true, false)
    else 
        dxDrawText("Porte de Armas: (#ff0000X#ffffff)", x*748, y*269, x*832, y*284, tocolor(255, 255, 255, 255), x*1.00, Font_5, "left", "top", false, false, false, true, false)
   end

se eu substituir por getAccountData ele não funciona o script inteiro.

Posted

Sim, getPlayerAccount é somente server, passe pra element-data novamente e salve na conta do jogador quando ele quitar com setAccountData.

Posted
10 minutes ago, Jonas^ said:

Sim, getPlayerAccount é somente serve

ok

 

11 minutes ago, Jonas^ said:

passe pra element-data novamente e salve na conta do jogador quando ele quitar com setAccountData.

não entendi

Posted

Coloque o comando novamente com element-data, ou seja, getElementData (..) e setElementData (..), dai quando o jogador quitar você usa o evento onPlayerQuit pra salvar na conta do jogador com getElementData e setAccountData dai quando ele logar getAccountData e setElementData com o valor.

  • Thanks 1
Posted
local Porte = tonumber(getElementData(Jogador, "porte")) or 0

	if Porte > 1 then
        dxDrawText("Porte de Armas: (#00ff00X#ffffff)", x*748, y*269, x*832, y*284, tocolor(255, 255, 255, 255), x*1.00, Font_5, "left", "top", false, false, false, true, false)
    else 
        dxDrawText("Porte de Armas: (#ff0000X#ffffff)", x*748, y*269, x*832, y*284, tocolor(255, 255, 255, 255), x*1.00, Font_5, "left", "top", false, false, false, true, false)
   end		
local porte = createMarker (252.36033630371,69.68399810791,1002.640625, "cylinder", 1.3, 255, 255, 255, 50)
setElementDimension (porte, 1)
setElementInterior (porte, 6)

addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getAccountData (getPlayerAccount(player), "porte") then -- Se o jogador não estiver com a account-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					getElementData (player, "porte", true) -- Seta a account-data na conta do jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 0, 255, 0)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 30, 30)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 30, 30)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 30, 30)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 30, 30)
	end	
end)

addEventHandler("onPlayerQuit" , player , setAccountData(player,"porte"))

 

desse jeito??

Posted

Meu deus mano, você ta tentando fazer sem nem se quer entender, olha oque você fez '-', primeira vez que vejo isso jesus

  • Thanks 1
Posted

tá , eu teria que fazer com o getElementData e depois o setElementData, ai quando o player desloga-se eu usaria o setAccountData para setar "porte" , dai quando ele entra-se eu usaria o OnPlayerJoin para verificar se getAccountData "porte" caso ele tivesse usaria o setElementData"porte" é isso?

Posted (edited)

Não, não se usa onPlayerJoin pra verificar uma data existente pois esse evento é antes do jogador fazer login na sua conta, vai retornar false.

Faça assim mano:

server-side

local porte = createMarker (249.60, 68.46, 1002.64, "cylinder", 1, 255, 255, 255, 50)
setElementDimension (porte, 1)
setElementInterior (porte, 6)

addCommandHandler ("comprarporte", function (player, cmd)
	if (not isGuestAccount (getPlayerAccount (player))) then -- Se o jogador não estiver deslogado, então:
		if isElementWithinMarker (player, porte) then -- Se o jogador estiver no marker, então:
			if not getElementData (player, "porte") then -- Se o jogador não estiver com a element-data "porte", então:
				if getPlayerMoney (player) >= 30000 then -- Se o jogador tiver menos ou igual a 30k, então:
					takePlayerMoney (player, 30000) -- Debita 30k da conta do jogador.
					setElementData (player, "porte", true) -- Seta a data no jogador.
					outputChatBox ("[AVISO] Você comprou o porte de armas!", player, 0, 255, 0)
				else --Se o jogador não tiver 30k, então:
					outputChatBox ("[AVISO] Você não tem dinheiro para o porte!", player, 255, 30, 30)
				end 
			else -- Se o jogador tiver a account-data, então:
				outputChatBox ("[AVISO] Você já tem o porte de armas!", player, 255, 30, 30)
			end 
		else -- Se o jogador não estiver no marker, então:
			outputChatBox ("[AVISO] Você não está na delegacia!", player, 255, 30, 30)
		end
	else -- Se o jogador estiver deslogado, então:
		outputChatBox ("[AVISO] Você não pode comprar o porte estando deslogado.", player, 255, 30, 30)
	end	
end)

function savePlayerPorte (p)
	if isElement(p) then
		local savePorte = getElementData (p, "porte") or false
		setAccountData (getPlayerAccount(p), "porte", savePorte)
	end
end

function loadPlayerPorte (p)
	if isElement(p) and not (isGuestAccount(getPlayerAccount(p))) then
		local loadPorte = getAccountData (getPlayerAccount(p), "porte") or false
		setElementData (p, "porte", loadPorte)
	end
end

addEventHandler ("onResourceStart", resourceRoot, function ()
	for i, p in ipairs(getElementsByType("player")) do
		loadPlayerPorte (p)
	end
end)

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

addEventHandler ("onResourceStop", resourceRoot, function ()
	for i, p in ipairs(getElementsByType("player")) do
		savePlayerPorte (p)
	end
end)

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

addEventHandler ("onPlayerLogout", root, function (acc)
	savePlayerPorte (source, acc)
end)

client-side

addEventHandler ("onClientRender", root, function ()
	local checkPorte = getElementData (localPlayer, "porte") or false
	if (checkPorte) then
		 dxDrawText ("Porte: Sim", -19, 459, 346, 493, tocolor(0, 255, 0, 255), 2.00, "default-bold", "center", "center", false, false, false, false, false)
	else
		 dxDrawText ("Porte: Não", -19, 459, 346, 493, tocolor(255, 0, 0, 255), 2.00, "default-bold", "center", "center", false, false, false, false, false)
	end	
end)

Leia este tópico:

Isso pode te ajudar de alguma forma.

Boa sorte!

@Renazz

Edited by Jonas^
Adição tópico do DNL
  • Like 1
  • Thanks 1
Posted
1 hour ago, Renazz said:

Arrumado , foi só tirar o onClientRender

 

https://imgur.com/a/6eW8wmV

+ uma coisa não to conseguindo colocar quando o player colide com a marker aparecer uma mensagem

Mostre o código que você está tentando.

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