Jump to content

[AJUDA]setElementData e TriggerEvent


Recommended Posts

Olá, olha eu aqui novamente rsrs... Então, estou desenvolvendo um Script de uma espécie de Seguradora, só que chegou á um ponto que me deparei que vou ter que usar setElementData e TriggerEvent, porém estou com muita dúvida. A parte de Abrir e Fechar o Painel está funcionando normalmente, porém onde eu quero chegar: Quando o jogador clicar no botão de Compra (Especificado no Código), seja setado nele uma data, que seria a String e mais um Número, no caso esse número seria um Kit a mais para esse jogador, e também que possa ter no máximo 3 kits... Sinceramente, estou bem perdido nessa parte, se puderem me ajudar agradeço...

 

client-side:

 

local screenW, screenH = guiGetScreenSize()

DeltaSCRPainel = false

function DeltaSCRDirectX ()
	-- @Comprar-Prata
	dxDrawRectangle(screenW * 0.3969, screenH * 0.5833, screenW * 0.0977, screenH * 0.0417, tocolor(50, 200, 50, 255), false)
end

function DeltaSCRAbrir ()
	if DeltaSCRPainel == false then
		DeltaSCRPainel = true
		showCursor (true)
		showChat (false)
		addEventHandler ("onClientRender", getRootElement(), DeltaSCRDirectX)
	else
		DeltaSCRPainel = false
		showCursor (false)
		showChat (true)
		removeEventHandler ("onClientRender", getRootElement(), DeltaSCRDirectX)
	end
end
addEvent ("DeltaSCR:OC", true)
addEventHandler ("DeltaSCR:OC", getRootElement(), DeltaSCRAbrir)

-- @Comprar-Prata

function DeltaComprarPrata (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement)
	if DeltaSCRPainel == true then
		if state == "down" then
			if isCursorOnElement (screenW * 0.3203, screenH * 0.2667, screenW * 0.3594, screenH * 0.4667) then
				-- //Aqui eu acho que começaria a funcionalidade em si...
			end
		end
	end
end
addEventHandler ("onClientClick", getRootElement(), DeltaComprarPrata)

-- @Cursor

function cursorPosition (x, y, w, h)
	if (not isCursorShowing()) then
		return false
	end
	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

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

 

Link to comment

Não é preciso passar por triggerEvent :\ ai vai um exemplo.

function Verificar_Kits ()
	local Kits = tonumber(getElementData(localPlayer, "Kit")) or 0 -- Verifica a quantia de kits
	if Kits < 3 then -- OS kits do jogador deve ser menor que 3
		setElementData(localPlayer, "Kit", Kits +1) -- setar mais 1 de kit
	else -- caso for maior que 3 retornar os kit pra 3 (Evitar Bugs)
		setElementData(localPlayer, "Kit", 3) -- Seta Kit 3 No jogador
	end -- FIm
end -- Fim

 

Link to comment

Na real não deu sucesso, tentei aqui e estou obtendo o restante do código sem ter dinheiro...

function DeltaComprarPrata (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement)
	if DeltaSCRPainel == true then
		if state == "down" then
			if isCursorOnElement (screenW * 0.3203, screenH * 0.2667, screenW * 0.3594, screenH * 0.4667) then
				if getPlayerMoney (localPlayer) <= 750 then
					verifyKits ()
					DeltaSCRAbrir ()
					outputChatBox ("Sucess")
				else
					outputChatBox ("notMoney")
				end
			end
		end
	end
end
addEventHandler ("onClientClick", getRootElement(), DeltaComprarPrata)

function verifyKits ()
	local Kits = tonumber(getElementData(localPlayer, "Kit")) or 0
	if Kits < 3 then
		setElementData(localPlayer, "Kit", Kits +1)
	else
		setElementData(localPlayer, "Kit", 3)
	end
end

 

Link to comment

Agora em outra parte do código o debug está acusando o seguinte erro:

Bad argument @ 'getPedOccupiedVehicle' [Expected ped at argument 1, got none]

function DeltaSCRFix (localPlayer)
	if getPedOccupiedVehicle(localPlayer) == true then
		outputChatBox ("#C83200╔═════════════════════════════════════════════════╗", 255, 255, 255, true)
		outputChatBox ("#C83200ERRO: #FFFFFFVocê usou seu Kit de Reparo com Sucesso", 255, 255, 255, true)
		outputChatBox ("#C83200╚═════════════════════════════════════════════════╝", 255, 255, 255, true)
	else
		outputChatBox ("#C83200╔═════════════════════════════════════════════════╗", 255, 255, 255, true)
		outputChatBox ("#C83200ERRO: #FFFFFFVocê precisa estar em um veículo para usar o Seguro", 255, 255, 255, true)
		outputChatBox ("#C83200╚═════════════════════════════════════════════════╝", 255, 255, 255, true)
	end
end
addCommandHandler ("seguro", DeltaSCRFix)

 

Link to comment
1 minute ago, Lord Henry said:

Nunca se usa localPlayer como parâmetro de função. Ele é uma variável nativa do client.

Ok, tirei o localPlayer dos parametros, só que agora, mesmo eu estando eu um veículo, está executando o else, no caso a mensagem que eu preciso estar em um veiculo...

Link to comment
  • Other Languages Moderators

Tente assim:

function DeltaSCRFix ()
	if getPedOccupiedVehicle(localPlayer) then
		outputChatBox ("╔═════════════════════════════════════════════════╗", 200, 50, 0)
		outputChatBox ("ERRO: #FFFFFFVocê usou seu Kit de Reparo com Sucesso", 200, 50, 0, true)
		outputChatBox ("╚═════════════════════════════════════════════════╝", 200, 50, 0)
	else
		outputChatBox ("╔═════════════════════════════════════════════════╗", 200, 50, 0)
		outputChatBox ("ERRO: #FFFFFFVocê precisa estar em um veículo para usar o Seguro", 200, 50, 0, true)
		outputChatBox ("╚═════════════════════════════════════════════════╝", 200, 50, 0)
	end
end
addCommandHandler ("seguro", DeltaSCRFix)

 

  • Thanks 1
Link to comment
  • Other Languages Moderators
4 minutes ago, #DeltaSCR said:

Ok, tirei o localPlayer dos parametros, só que agora, mesmo eu estando eu um veículo, está executando o else, no caso a mensagem que eu preciso estar em um veiculo...

Nesse caso ele estava entrando no else pois getPedOccupiedVehicle não retorna true se existir um veículo, ele retorna o próprio veículo. Logo aquela primeira condição sempre seria false.

Edited by Lord Henry
Link to comment

Agora o Debug Acusa:

Spoiler

Attempt to compare number with nil

function DeltaSCRFix ()
	if getPedOccupiedVehicle(localPlayer) then
		Kits = tonumber(getElementData(localPlayer, "Kit")) or 0
		if Kits > 0 then
			setElementData(localPlayer, "Kit", Kits -1)
			outputChatBox ("╔═════════════════════════════════════════════════╗", 200, 50, 0)
			outputChatBox ("INFO: #FFFFFFVocê usou seu Kit de Reparo com Sucesso.", 200, 50, 0, true)
			outputChatBox ("INFO: #FFFFFFVocê agora tem mais "..Kits.." usos.", 200, 50, 0, true)
			outputChatBox ("╚═════════════════════════════════════════════════╝", 200, 50, 0)
		end
	end
end
addCommandHandler ("seguro", DeltaSCRFix)

 

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