Jump to content

Estou fazendo um script de prender o veiculo em algo


Recommended Posts

Mas não consigo, algo da errado no 'isElementInRange', alguém poderia me ajudar?

addCommandHandler("car",
	function(thePlayer,veh)
    
		local x, y, z = getElementPosition (thePlayer)
		local veh = getElementsByType('vehicle')
		if isElementInRange(veh, x, y, z, 25) then
		outputChatBox("teste",thePlayer,255,255,255,true)
		
		end
	end
end
)

Print do erro: https://prnt.sc/12bhy03

Link to comment
52 minutes ago, Kii said:

Mas não consigo, algo da errado no 'isElementInRange', alguém poderia me ajudar?


addCommandHandler("car",
	function(thePlayer,veh)
    
		local x, y, z = getElementPosition (thePlayer)
		local veh = getElementsByType('vehicle')
		if isElementInRange(veh, x, y, z, 25) then
		outputChatBox("teste",thePlayer,255,255,255,true)
		
		end
	end
end
)

Print do erro: https://prnt.sc/12bhy03

Já tentou utilizar o attachElements?

addCommandHandler("car",
	function(player)
        local pPos = {getElementPosition(player)}
        local pRot = {getElementRotation(player)}
        local pVeh = createVehicle(429, pPos[1], pPos[2], pPos[3], 0, 0, pRot[3])
        attachElements(pVeh, player, 0, 0, 0)
    end
)

Ou, caso queira verificar se o carro próximo está com o attachsElements, use: isElementAttached:

addCommandHandler("proxcar", 
    function(player)
        local pPos = {getElementPosition(player)}
        for _, vehicle in ipairs(getElementsByType("vehicle")) do
            local vPos = {getElementPosition(vehicle)}
            if (getDistanceBetweenPoints3D(pPos[1], pPos[2], pPos[3], vPos[1], vPos[2], vPos[3]) <= 3) then
                if (isElementAttached(vehicle)) then
                    print("O veículo está atachado.")
                else
                    print("Não está atachado!")
                end
            end
        end
    end
)

 

Link to comment
3 hours ago, RomanDev said:

Já tentou utilizar o attachElements?


addCommandHandler("car",
	function(player)
        local pPos = {getElementPosition(player)}
        local pRot = {getElementRotation(player)}
        local pVeh = createVehicle(429, pPos[1], pPos[2], pPos[3], 0, 0, pRot[3])
        attachElements(pVeh, player, 0, 0, 0)
    end
)

Ou, caso queira verificar se o carro próximo está com o attachsElements, use: isElementAttached:


addCommandHandler("proxcar", 
    function(player)
        local pPos = {getElementPosition(player)}
        for _, vehicle in ipairs(getElementsByType("vehicle")) do
            local vPos = {getElementPosition(vehicle)}
            if (getDistanceBetweenPoints3D(pPos[1], pPos[2], pPos[3], vPos[1], vPos[2], vPos[3]) <= 3) then
                if (isElementAttached(vehicle)) then
                    print("O veículo está atachado.")
                else
                    print("Não está atachado!")
                end
            end
        end
    end
)

 

Bom, acho que não ficou muito claro o que eu disse, peço desculpas então tentarei explicar o "contexto", estou tentando criar algo para puxar um veiculo (com o attachElement) em uma certa distancia (entre 25 metros), mas não entendo muito então não sei muito bem como fazer... Se pudesse me dar uma ideia de como prosseguir para puxar o veiculo seria grato!

Link to comment
  • Other Languages Moderators

AttachElements seria mais para "colar" um elemento em outro. Mas você pode usar os parâmetros de offset dele para deixar o elemento "colado porém distante" do outro elemento.

@Kii, sobre seu problema é pq veh é uma tabela e não um veículo.

Veja oq a função getElementsByType retorna.

  • Thanks 2
Link to comment

Então senhores, creio que consegui chegar em algo... Mas ainda a um problema, quando eu utilizo o comando o veiculo vem até mim e "cola", mas caso eu me locomova para um outro local com o veiculo "colado", e tentar solta-lo depois, ele simplesmente não solta. Se os senhores poderem me ajudar...

gpStaff = "Staff"
function testePa (thePlayer)
		if isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup (gpStaff)) then 
		
		local x, y, z = getElementPosition (thePlayer)
		local pcM = createMarker(x, y, z, "cylinder",20,255,255,0,25)
		attachElements(pcM, thePlayer, 0, 0, -1)
		setTimer ( function()
		destroyElement(pcM)
		end, 2000, 1 )
	
	local nearbyVehicles = getElementsWithinRange(x, y, z, 10, "vehicle")
		for i,v in ipairs(nearbyVehicles) do
			if v and isElement(v) then
				if getElementData(thePlayer, "vehMarkerHited") == false then
				setElementData(thePlayer, "vehMarkerHited", true)
				outputChatBox("pegou")
				attachElements(v, thePlayer)
				setVehicleDamageProof(v, true)
				else
				setElementData(thePlayer, "vehMarkerHited", false)
				outputChatBox("soltou")
				detachElements(v, thePlayer) 
				setVehicleDamageProof(v, false)
				end
			end
		end
	end
end
addCommandHandler("t",testePa)

 

Link to comment
19 minutes ago, Kii said:

Então senhores, creio que consegui chegar em algo... Mas ainda a um problema, quando eu utilizo o comando o veiculo vem até mim e "cola", mas caso eu me locomova para um outro local com o veiculo "colado", e tentar solta-lo depois, ele simplesmente não solta. Se os senhores poderem me ajudar...


gpStaff = "Staff"
function testePa (thePlayer)
		if isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup (gpStaff)) then 
		
		local x, y, z = getElementPosition (thePlayer)
		local pcM = createMarker(x, y, z, "cylinder",20,255,255,0,25)
		attachElements(pcM, thePlayer, 0, 0, -1)
		setTimer ( function()
		destroyElement(pcM)
		end, 2000, 1 )
	
	local nearbyVehicles = getElementsWithinRange(x, y, z, 10, "vehicle")
		for i,v in ipairs(nearbyVehicles) do
			if v and isElement(v) then
				if getElementData(thePlayer, "vehMarkerHited") == false then
				setElementData(thePlayer, "vehMarkerHited", true)
				outputChatBox("pegou")
				attachElements(v, thePlayer)
				setVehicleDamageProof(v, true)
				else
				setElementData(thePlayer, "vehMarkerHited", false)
				outputChatBox("soltou")
				detachElements(v, thePlayer) 
				setVehicleDamageProof(v, false)
				end
			end
		end
	end
end
addCommandHandler("t",testePa)

 

Olá novamente, desculpe-me pelo meu erro acima! Eu acho que consegui entender o que você precisa, sendo assim eu fiz outro código (baseado no seu) com algumas funções a mais.

 

function getNearestVehicle(player, distance)
	local lastMinDis = distance - 0.0001
	local nearestVeh = false
	local px, py, pz = getElementPosition(player)
	local pint = getElementInterior(player)
	local pdim = getElementDimension(player)

	for _, v in pairs(getElementsByType("vehicle")) do
		local vint, vdim = getElementInterior(v), getElementDimension(v)
		if vint == pint and vdim == pdim then
			local vx,vy,vz = getElementPosition(v)
			local dis = getDistanceBetweenPoints3D(px, py, pz, vx, vy, vz)
			if dis <= distance then
				if dis <= lastMinDis then 
					lastMinDis = dis
					nearestVeh = v
				end
			end
		end
	end
	return nearestVeh
end

local gpStaff = "Staff"
function detachVehicle(player)
    if (isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(player))), aclGetGroup(gpStaff))) then 
        local pPos = {getElementPosition(player)} -- Posição do player
        local pVeh = getNearestVehicle(player, 3) -- Todos os veículos até 3 metros de você 
        local pMarker = createMarker(pPos[1], pPos[2], pPos[3], "cylinder", 1.5, 255, 255, 0, 180)
        attachElements(pMarker, player, 0, 0, -1)

        setTimer(
            function()
                destroyElement(pMarker)
            end
        , 2000, 1)

        if (pVeh and isElement(pVeh)) then
            if (not getElementData(player, "vehMarkerHited")) then
                outputChatBox("pegou")
                attachElements(pVeh, player)
                setVehicleDamageProof(pVeh, true)
                setElementData(player, "vehMarkerHited", true)
            else
                outputChatBox("soltou")
                setVehicleDamageProof(pVeh, false)
                setElementData(player, "vehMarkerHited", false)
                if (isElementAttached(pVeh)) then
                    detachElements(pVeh, player) 
                end
            end
        end
	end
end
addCommandHandler("t", detachVehicle)

Espero que te ajude!

  • Thanks 1
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...