Jump to content

[DUVIDA] Veiculo cair da água


Recommended Posts

  • Other Languages Moderators
Posted (edited)

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

  • Other Languages Moderators
Posted

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
Posted

Mano me desculpa por está incomodando mas agora que me lembrei os jogadores não pode usar o barco senão teleporta também rsrs.
Alguma forma para saber qual veiculo o jogador está??

  • Other Languages Moderators
Posted

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

  • Other Languages Moderators
Posted
20 minutes ago, DNL291 said:

Também tem aquele helicóptero que fica na água.

Seasparrow (447).

  • Like 1

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