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? 

Discord: Rena#5383

 

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?

Discord: Rena#5383

 

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

Discord: Rena#5383

 

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

Discord: Rena#5383

 

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.

Discord: Rena#5383

 

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

Discord: Rena#5383

 

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

Discord: Rena#5383

 

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?

Discord: Rena#5383

 

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.

Please do not PM me with scripting related question nor support, use the forums instead.

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