Jump to content

Dúvida onClientVehicleExit


Recommended Posts

Boa noite galera, estou com um problema sobre o uso "getPedOccupiedVehicleSeat". Abaixo eu quero inserir a função que o veículo se torne destrutível quando o jogador sai do veículo, mas quero que isso aconteça apenas quando o jogador seja o motorista do veículo, mas todas as maneiras que eu tento a função não funciona pelo fato do evento "onClientVehicleExit" chamar a função quando o jogador já está fora do veículo, assim não funcionando o "getPedOccupiedVehicleSeat". O que eu devo fazer?

 

function onClientVehicleExit(player)
	if (player == localPlayer) then
		if getElementData(player,"Modo Passivo") then
			for k,v in ipairs(getElementsByType("vehicle")) do
				setVehicleDamageProof(source,false)
				exports["bvd-notices"]:addNotification("VEÍCULO DESTRUTIVEL",'error')
			end
		end
	end
end
addEventHandler("onClientVehicleExit", root, onClientVehicleExit)

 

Desde já, agradeço quem puder ajudar.

Link to comment

Voce deve realizar essa funcao no server! Usa-se este evento no server( onVehicleStartExit ) , nao use onVehicleExit, pois nao ira destruir o veiculo, pois o player ja estara fora dele!

eu fiz um script parecido para meu servidor esses dias, que ficou desta forma

 


function AclParaCadaCarro(source)
    local seat = getPedOccupiedVehicleSeat(source)
    local Veiculo = getPedOccupiedVehicle(source)
    local Conta = getAccountName(getPlayerAccount(source))
    if getElementModel(Veiculo) == 416 and not isObjectInACLGroup( "user."..Conta, aclGetGroup ("SAMU")) and seat == 0 then
        local x, y, z = getElementPosition(Veiculo)
        removePedFromVehicle(source, Veiculo)
        setElementPosition(source, x+4, y, z)
    end
end
addEventHandler("onVehicleEnter", getRootElement(), AclParaCadaCarro)

--[[
Server-Side
]]

 

  • Thanks 1
Link to comment
On 03/01/2021 at 12:50, Otavio said:

Voce deve realizar essa funcao no server! Usa-se este evento no server( onVehicleStartExit ) , nao use onVehicleExit, pois nao ira destruir o veiculo, pois o player ja estara fora dele!

eu fiz um script parecido para meu servidor esses dias, que ficou desta forma

 



function AclParaCadaCarro(source)
    local seat = getPedOccupiedVehicleSeat(source)
    local Veiculo = getPedOccupiedVehicle(source)
    local Conta = getAccountName(getPlayerAccount(source))
    if getElementModel(Veiculo) == 416 and not isObjectInACLGroup( "user."..Conta, aclGetGroup ("SAMU")) and seat == 0 then
        local x, y, z = getElementPosition(Veiculo)
        removePedFromVehicle(source, Veiculo)
        setElementPosition(source, x+4, y, z)
    end
end
addEventHandler("onVehicleEnter", getRootElement(), AclParaCadaCarro)

--[[
Server-Side
]]

 

Interessante, obrigado amigo.

3 hours ago, Boechat said:

Se o problema é esse, use o onClientVehicleStartExit, que vai chamar a função quando o player começar a sair do veículo.

Também tive essa ideia, mas ocorreria alguns problemas durante o jogo pelo fato de não acontecer a real saída do veículo pelo jogador.

Link to comment
  • Other Languages Moderators

@Otavionão se usa source como parâmetro de função.

@[C]outofaça o script server-side, com onVehicleExit e utilizando o parâmetro do assento para saber se foi o motorista que saiu do veículo.

function desblindar (thePed, seat)
    if (seat == 0) then
        if (getElementData (thePed, "Modo Passivo")) then
            setVehicleDamageProof (source, false)
            outputChatBox ("Seu veículo agora está destrutível.", thePed)
        end
    end
end
addEventHandler ("onVehicleExit", root, desblindar)

 

  • Thanks 2
Link to comment
7 minutes ago, Lord Henry said:

@Otavionão se usa source como parâmetro de função.

@[C]outofaça o script server-side, com onVehicleExit e utilizando o parâmetro do assento para saber se foi o motorista que saiu do veículo.


function desblindar (thePed, seat)
    if (seat == 0) then
        if (getElementData (thePed, "Modo Passivo")) then
            setVehicleDamageProof (source, false)
            outputChatBox ("Seu veículo agora está destrutível.", thePed)
        end
    end
end
addEventHandler ("onVehicleExit", root, desblindar)

 

A uns dias atras eu fiz dessa mesma maneira, mas quando o jogador desce recebe apenas a mensagem mas o veículo continua blindado

Problema resolvido, agradeço a todos que ajudaram.

Link to comment
  • Other Languages Moderators

Provavelmente pois você ficou sem o modo passivo. Então a condição não vai passar e o veículo continuará blindado. Remova a condição de modo passivo para que o veículo desblinde sempre que o motorista sair dele. (se quiser evitar que ocorra com Staffs usando /pro, vc deverá criar tal exceção.)

Verifique se o veículo está blindado antes de desblindá-lo e enviar a mensagem, caso contrário a mensagem vai ficar aparecendo pra todo mundo que sair de seus veículos, mesmo se não estiverem blindados.

function desblindar (thePed, seat)
    if (seat == 0) then -- Se o jogador saiu do assento do motorista, então:
        if (isVehicleDamageProof (source)) then -- Se o veículo está blindado quando o jogador sair dele, então: 
            setVehicleDamageProof (source, false) -- Desblinda o veículo.
            outputChatBox ("Seu veículo agora está destrutível.", thePed)
        end
    end
end
addEventHandler ("onVehicleExit", root, desblindar)

 

Edited by Lord Henry
  • Thanks 1
Link to comment
3 minutes ago, Lord Henry said:

Provavelmente pois você ficou sem o modo passivo. Então a condição não vai passar e o veículo continuará blindado. Remova a condição de modo passivo para que o veículo desblinde sempre que o motorista sair dele. (se quiser evitar que ocorra com Staffs usando /pro, vc deverá criar tal exceção.)

Verifique se o veículo está blindado antes de desblindá-lo e enviar a mensagem, caso contrário a mensagem vai ficar aparecendo pra todo mundo que sair de seus veículos, mesmo se não estiverem blindados.


function desblindar (thePed, seat)
    if (seat == 0) then -- Se o jogador saiu do assento do motorista, então:
        if (isVehicleDamageProof (source)) then -- Se o veículo está blindado quando o jogador sair dele, então: 
            setVehicleDamageProof (source, false) -- Desblinda o veículo.
            outputChatBox ("Seu veículo agora está destrutível.", thePed)
        end
    end
end
addEventHandler ("onVehicleExit", root, desblindar)

 

Já foi resolvido, o problema que estava ocorrendo era que o veículo estava sendo blindado duas vezes no server e client. Retirei do client e a função está funcionando perfeitamente. Obrigado amigo.

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