Jump to content

Duvida getPedOccupiedVehicle


Recommended Posts

local posicoes =
    {
        { 2457.5451660156, -1658.8039550781, 13.3046875 },
    }
	
function PosicaoPlayer ( thePlayer, command )
	if (getElementDimension(thePlayer) ~= 0) then return end
    local azar = math.random ( #posicoes )
	local veh = getPedOccupiedVehicle(thePlayer)
		if veh then
			setElementPosition(veh, unpack ( posicoes [ azar ] ) )
			outputChatBox ( "#ffffff「 #00ccffTELE #ffffff」 #FFFFFF".. getPlayerName(thePlayer) .." #FFFFFFFoi para o CJ com seu veículo #ffffff( #00ccff/cjcar #ffffff)", root, 0, 255, 0, true )
end
end
addCommandHandler ( "cjcar", PosicaoPlayer  )

Com o getPedOccupiedVehicle ele verifica o player que está dentro ou tentando entrar no veiculo. Existe outra função que possa verificar apenas quem está dentro do veículo?

Link to comment
local posicoes =
    {
        { 2457.5451660156, -1658.8039550781, 13.3046875 },
    }
	
function PosicaoPlayer ( thePlayer, command )
	if (getElementDimension(thePlayer) ~= 0) then return end
	local azar = math.random ( #posicoes )
	local veh = getPedOccupiedVehicle(thePlayer)
	if veh then
		if isVehicleEmpty( veh ) then
			outputChatBox("este veículo só tem o motorista")
		else
			outputChatBox("este veículo tem passageiro(s)")
		end
		setElementPosition(veh, unpack ( posicoes [ azar ] ) )
		outputChatBox ( "#ffffff「 #00ccffTELE #ffffff」 #FFFFFF".. getPlayerName(thePlayer) .." #FFFFFFFoi para o CJ com seu veículo #ffffff( #00ccff/cjcar #ffffff)", root, 0, 255, 0, true )
	end
end
addCommandHandler ( "cjcar", PosicaoPlayer  )

function isVehicleEmpty( vehicle )
	if not isElement( vehicle ) or getElementType( vehicle ) ~= "vehicle" then
		return true
	end

	local passengers = getVehicleMaxPassengers( vehicle )
	if type( passengers ) == 'number' then
		for seat = 1, passengers do
			if getVehicleOccupant( vehicle, seat ) then
				return false
			end
		end
	end
	return true
end

 

Link to comment

Não expliquei totalmente para que seria a troca das funções. Com o getPedOccupiedVehicle ele verifica o player que está dentro ou tentando entrar no veículo, em alguns servidores que possuem esse tipo de teleporte o player costuma se aproveitar dessa função e acaba "movendo" veículos. Como seria esse "movendo"? Simples. Eles apertam f ou g e utilizam uma bind do teleporte rapidamente. Minha intenção é verificar se o player está dentro do veículo e não tentando entrar nele.

Link to comment

Acho que entendi o que você disse. Fiz um código que verifica se o jogador está entrando no veículo, tente isto:


local playerTempVeh = {}

local posicoes =
    {
        { 2457.5451660156, -1658.8039550781, 13.3046875 },
    }
	
function PosicaoPlayer ( thePlayer, command )
	if (getElementDimension(thePlayer) ~= 0) then return end
	local azar = math.random ( #posicoes )
	local veh = getPedOccupiedVehicle(thePlayer)
	if veh and not playerTempVeh[thePlayer] then
		setElementPosition(veh, unpack ( posicoes [ azar ] ) )
		outputChatBox ( "#ffffff「 #00ccffTELE #ffffff」 #FFFFFF".. getPlayerName(thePlayer) .." #FFFFFFFoi para o CJ com seu veículo #ffffff( #00ccff/cjcar #ffffff)", root, 0, 255, 0, true )
	end
end
addCommandHandler ( "cjcar", PosicaoPlayer  )

--

addEventHandler( "onVehicleStartEnter", root,
	function(player,seat)
		playerTempVeh[player] = source
		
		setTimer( function(p)
			if playerTempVeh[p] then playerTempVeh[p] = nil end
			setElementFrozen( p, true )
			setTimer( setElementFrozen, 50, 1, p, false )
		end,10000, 1, player )
	end
)

addEventHandler( "onElementDestroy", root,
	function()
		if getElementType(source) ~= "vehicle" then return end
		
		local enteringPlayers = getPlayersFromVehicleInTable( playerTempVeh, source )
		if enteringPlayers and #enteringPlayers > 0 then
			for i, player in ipairs(enteringPlayers) do
				if isElement(player) and playerTempVeh[player] then
					playerTempVeh[player] = nil
				end
			end
		end
	end
)

addEventHandler( "onVehicleEnter", root,
	function(p, seat)
		if playerTempVeh[p] then
			playerTempVeh[p] = nil
		end
	end
)

function removeFromTable()
	if playerTempVeh[source] then
		playerTempVeh[source] = nil
	end
end
addEventHandler( "onPlayerQuit", root, removeFromTable )
addEventHandler( "onPedWasted", root, removeFromTable )

function getPlayersFromVehicleInTable( t, v )
	if type(t) ~= "table" or not isElement(v) then return false end
	
	local players = {}
	for player, vehicle in pairs(t) do
		if vehicle == v then
			table.insert( players, player )
		end
	end
	return players
end

 

  • Thanks 1
Link to comment

De nada! 

Como você pode ver no timer, coloquei 10 segundos no tempo limite para o jogador poder entrar no veículo (às vezes tem aquele bug do ped travar em outras coisas e demorar muito), aí dou um freeze e unfreeze pra parar a animação de entrar.

Edited by DNL291
Link to comment

Não consegui identificar o problema, mas por algum motivo no debug aparece erro no setElementFrozen. O teste que eu tinha feito foi em servidor local, já no servidor com players apresentou esse problema, que aparece de forma aleatória. Fora isso sem problemas no script. 

Link to comment
setTimer( function(p)
	if playerTempVeh[p] then playerTempVeh[p] = nil end
	if isElement(p) then
		setElementFrozen( p, true )
		setTimer( setElementFrozen, 150, 1, p, false )
	end
end,10000, 1, player )

Substitua o timer com esse código. Se você perceber qualquer erro, digite /debugscript 3 e mostre aqui a mensagem do debug.

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