Jump to content

[DUVIDA] Veiculo cair da água


Recommended Posts

  • Other Languages Moderators

Não sei se esta é a melhor maneira de fazer isso, pois não achei nenhuma função que detecte colisão na água. Então usei um onClientRender para ficar verificando o tempo todo se o veículo está na água ou não. Para não ficar verificando de maneira desnecessária, quando o jogador sai do veículo, ele deve parar de verificar. E quando ele entrar em um veículo como motorista, começa a verificar novamente.

client-side

local posX, posY, posZ = 527.23, 631.9, 2.19 -- Posição teste onde o veículo será movido ao colidir na água.

function vehicleRender ()
	if getPedOccupiedVehicle (localPlayer) then
		if isElementInWater (getPedOccupiedVehicle (localPlayer)) then
			setElementPosition (getPedOccupiedVehicle (localPlayer), posX, posY, posZ)
		end
	end
end

addEventHandler ("onClientVehicleEnter", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		if seat == 0 then
			addEventHandler("onClientRender", root, vehicleRender)
		end
	end
end)

addEventHandler ("onClientVehicleExit", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		removeEventHandler("onClientRender", root, vehicleRender)
	end
end)

 

Edited by Lord Henry
  • Like 1
Link to comment
1 hour ago, Lord Henry said:

Não sei se esta é a melhor maneira de fazer isso, pois não achei nenhuma função que detecte colisão na água. Então usei um onClientRender para ficar verificando o tempo todo se o veículo está na água ou não. Para não ficar verificando de maneira desnecessária, quando o jogador sai do veículo, ele deve parar de verificar. E quando ele entrar em um veículo como motorista, começa a verificar novamente.

client-side


local posX, posY, posZ = 527.23, 631.9, 2.19 -- Posição teste onde o veículo será movido ao colidir na água.

function vehicleRender ()
	if getPedOccupiedVehicle (localPlayer) then
		if isElementInWater (getPedOccupiedVehicle (localPlayer)) then
			setElementPosition (getPedOccupiedVehicle (localPlayer), posX, posY, posZ)
		end
	end
end

addEventHandler ("onClientVehicleEnter", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		if seat == 0 then
			addEventHandler("onClientRender", root, vehicleRender)
		end
	end
end)

addEventHandler ("onClientVehicleExit", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		removeEventHandler("onClientRender", root, vehicleRender)
	end
end)

 

Funciono perfeitamente, outra pergunta tem como tipo quando o veiculo teleporta depois de uns segundos ele ser destruido? É para um servidor de rpg ai eu quero que nao fica veiculo do local para os jogadores não fica roubado sabe

Link to comment
  • Other Languages Moderators

Você pode usar um setTimer para destruir o veículo após tantos segundos que ele ficou vazio e também pode cancelar esse timer quando alguém entrar no veículo. No entanto, não existe uma função que detecta quando um veículo é criado. Se o player criar o veículo e não entrar nele, o timer não será criado.

server-side

vehTimer = {}

addEventHandler ("onVehicleExit", getRootElement(), function (thePlayer, seat, jacker, forcedByScript)
	local counter = 0
	for seat, player in pairs(getVehicleOccupants(source)) do
		counter = counter + 1
	end
	if counter == 0 then -- Se o veículo ficou vazio após esse player sair dele, então:
		vehTimer[source] = setTimer (destroyElement, 5000, 1, source) -- destroi o veículo após 5 segundos que alguém saiu dele.
	end
end)

addEventHandler ("onVehicleEnter", getRootElement(), function (thePlayer, seat, jacked)
	if isTimer (vehTimer[source]) then
		killTimer (vehTimer[source])
	end
end)

 

  • Like 1
  • Thanks 1
Link to comment
  • Other Languages Moderators

Só usar getVehicleType e verificar se o veículo não é um barco.

local posX, posY, posZ = 527.23, 631.9, 2.19 -- Posição teste onde o veículo será movido ao colidir na água.

function vehicleRender ()
	if getPedOccupiedVehicle (localPlayer) then
		if isElementInWater (getPedOccupiedVehicle (localPlayer)) then
			setElementPosition (getPedOccupiedVehicle (localPlayer), posX, posY, posZ)
		end
	end
end

addEventHandler ("onClientVehicleEnter", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		if seat == 0 then
			if getVehicleType (source) ~= "Boat" then
				addEventHandler("onClientRender", root, vehicleRender)
			end
		end
	end
end)

addEventHandler ("onClientVehicleExit", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		removeEventHandler("onClientRender", root, vehicleRender)
	end
end)

 

  • Like 1
Link to comment
 
 
On 26/11/2018 at 10:04, Lord Henry said:

Só usar getVehicleType e verificar se o veículo não é um barco.


local posX, posY, posZ = 527.23, 631.9, 2.19 -- Posição teste onde o veículo será movido ao colidir na água.

function vehicleRender ()
	if getPedOccupiedVehicle (localPlayer) then
		if isElementInWater (getPedOccupiedVehicle (localPlayer)) then
			setElementPosition (getPedOccupiedVehicle (localPlayer), posX, posY, posZ)
		end
	end
end

addEventHandler ("onClientVehicleEnter", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		if seat == 0 then
			if getVehicleType (source) ~= "Boat" then
				addEventHandler("onClientRender", root, vehicleRender)
			end
		end
	end
end)

addEventHandler ("onClientVehicleExit", root, function (thePlayer, seat)
	if thePlayer == localPlayer then
		removeEventHandler("onClientRender", root, vehicleRender)
	end
end)

 

Desculpem pelo erro, meu PC está horrível.

Então, acho que se ele utilizasse um loop, com getElementsByType("vehicle") e uma verificação de controller, ele consegue fazer isto.

setTimer(function()
    for index, vehicle in ipairs(getElementsByType("vehicle") do
        if not vehicle:getController() then
            vehicle:destroy()
        end
    end
end, 4000, 0)

 

Não sei se isto faz lógica, só testando.

14 hours ago, brunob22 said:

ate onde eu sei. o forum e para ajudar o pessoal com problemas em seus codigo. não distribuir codigos prontos assim nunca vao aparender

Acho que a forma que ajuda, vai de cada um, ele passou o código, mas também explicou, sendo assim, cabe ao criador do tópico, e a quem está vendo aquilo, absorver ou não o conhecimento.

No entanto, o que você está fazendo é pior ainda, criticar um usuário, que de uma forma, ou de outra, o ajudou.

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