Jump to content

Dúvida onClientVehicleExit


Recommended Posts

Posted

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.

Posted

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

 

Posted
On 02/01/2021 at 22:55, [C]outo said:

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

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

Te ajudei? Me ajude também deixando seu Thanks! :Dspacer.png

 

Discord: _muelzera_

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

  • Moderators
Posted

@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)

 

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanks! spacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

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

  • Moderators
Posted (edited)

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

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanks! spacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

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

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