Jump to content

[AJUDA] Reparar carro distancia


Recommended Posts

Olá gostaria que alguém pudesse me ajuda com esse script aqui eu estou tentando fazer um /reparar perto do carro, mas eu peguei uma função da wiki getNearestVehicle so que dessa função está pegando todos os carros do mapa e eu so queria o carro que está perto do mecanico/jogador.

Server-side
 

function Repara_Veiculo_Mecanico(player,distance)
    local JogadorX,JogadorY,JogadorZ = getElementPosition(player)
    local JogadorInterior = getElementInterior(player)
    local JogadorDimensao = getElementDimension(player)
    for _,v in pairs(getElementsByType("vehicle")) do
    	local vint,vdim = getElementInterior(v),getElementDimension(v)
        local HP = getElementHealth(v)
        if vint == JogadorInterior and vdim == JogadorDimensao then
        	local VeiculoX,VeiculoY,VeiculoZ = getElementPosition(v)
            local dis = getDistanceBetweenPoints3D(JogadorX,JogadorY,JogadorZ,VeiculoX,VeiculoY,VeiculoZ)
            if not getPedOccupiedVehicle(player) then
            	if HP < 100 then
            		if dis < 2 then
            			outputChatBox ( "Você reparou o carro com sucesso!!", player, 255, 255, 255, true )
                		fixVehicle(v)
                		playSoundFrontEnd( player, 46 )
                	else
                		exports.Scripts_Dxmessages:outputDx(player, "Sem carro perto!!", "warning")
                	end
                else
                	outputChatBox ( "Carro ja está reparado!!", player, 255, 255, 255, true )
                end
            else
            	outputChatBox ( "Voce está dentro de um veiculo!!", player, 255, 255, 255, true )
        	end
        end
    end
end
addCommandHandler("reparar", Repara_Veiculo_Mecanico)

 

Link to comment

for _,v in pairs(getElementsByType("vehicle")) do = Loop de todos os veiculos do servidor. Tente isso

function repair(source,cmd,pname)
		local cliente = getPlayerFromPartialName(pname) -- Verifica nick do Cliente
		if isElement(cliente) then -- Verifica Se cliente é um Elemento
			if isPedInVehicle(cliente) then -- Verifica se o cliente está em um veiculo ou não 
				local seat = getPedOccupiedVehicleSeat(cliente) -- Verifica o acento que o cliente está.
				if seat == 0 then -- Caso o acento for igual a 0 então...
						local cx,cy,cz = getElementPosition(cliente) -- Verifica posições do cliente
						local x,y,z = getElementPosition(source) -- Verifica Posição do Mecanico
						local dist = getDistanceBetweenPoints3D(x,y,z,cx,cy,cz) -- Verifica função de ambas das partes.
						if dist <= 7 then -- Se a distancia dos Dois jogadores for Menor ou = a 7 Então tudo ocorrerá com os Conformes.
						local Cliente_Money = getPlayerMoney(cliente) -- Verifica todo o dinheiro do jogador
							if Cliente_Money >= 500 then -- se o Money do cliente for  Maior ou Igual há 500.
						local Vehicle_C = getPedOccupiedVehicle(cliente) -- Verifica se o Jogador está em um veiculo ou não
				        	if isElement(Vehicle_C) then -- Verifica se "Vehicle_C e um Elemento, Dai Então (fixVehicle)
					        	fixVehicle(Vehicle_C) -- Repara Totalmente o veiculo do Cliente 
							end -- Fim
								exports.Scripts_Dxmessages:outputDx(source, "Você reparou o veiculo Do"..getPlayerName(cliente), "warning")		
								
							---- Mensagem Cliente Sem Money (Line 117)
							else
							    exports.Scripts_Dxmessages:outputDx(source, "O Jogador "..getPlayerName(cliente).." Não tem Dinheiro Suficiente!", "error")
							end
							
							---- Mensagem Distancia (Line 115)
							else
							    exports.Scripts_Dxmessages:outputDx(source, "Chegue mais perto do jogador!", "error")
						    end
							
							---- Mensagem If Not seat = 0 (Line 111)
							else
							    exports.Scripts_Dxmessages:outputDx(source, "O Jogador "..getPlayerName(cliente).." Não é o Motorista do Veiculo!", "error")
							end
							
							---- Mensagem Cliente isPedInVehicle (Line 109)
							else
							    exports.Scripts_Dxmessages:outputDx(source, "O Jogador "..getPlayerName(cliente).." Não Esta em um Veiculo!", "error")
							end
							
							---- Mensagem Cliente Não encontrado (Line 108)
							else
							    exports.Scripts_Dxmessages:outputDx(source, "O Jogador Não Foi Encontrado", "error")
							=end
end
addCommandHandler("reparar",repair)

 

  • Thanks 1
Link to comment

Bom obrigado pela essa ajuda, mas não queria reparar o veiculo assim pois gostaria que eu tivesse perto do carro digitaria /reparar sem precisar tem alguém dentro do carro. Estou querendo esse script para o servidor RP pois eu não muito certo você arruma um carro dentro dele né?

Link to comment
  • Other Languages Moderators

Olá.

Bom, fiz aqui para você, tá incompleto mas você pode adicionar mais coisas e fazer o que quiser com o código. Basta você chegar perto de um veículo, apertar 'M' para fazer o cursor aparecer e clicar em cima de um veículo.

-- client-side
addEventHandler ( "onClientClick", root, function ( _, _, _, _, _, _, _, clickedElement )

	if ( clickedElement ) then
		
		if ( getElementType ( clickedElement ) == "vehicle" ) then
			triggerServerEvent ( "onClientRequestRepair", localPlayer, clickedElement );
		end
		
	end
	
end

bindKey ( "M", "down", function ( )
	
	showCursor ( not isCursorShowing ( ) );
	
end )

-- server-side

addEvent ( "onClientRequestRepair", true );

addEventHandler ( "onClientRequestRepair", root, function ( element )
	
	local ePos 		= getElementPosition ( element );
	local pPos 		= getElementPosition ( source );
	local distance	= getDistanceBetweenPoints3D ( ePos[1], ePos[2], ePos[3], pPos[1], pPos[2], pPos[3] );
	
	if ( distance > 3 ) then
		return outputChatBox ( "* ERRO: O veículo não está próximo de você.", source, 255, 0, 0 );
	end
	
	fixVehicle ( element );
	
end )

Como eu disse, tá incompleto. Altere ou faça mais coisas no server-side, creio eu que não seja necessário mexer no client-side.

Edited by asrzk
Link to comment
48 minutes ago, asrzk said:

Olá.

Bom, fiz aqui para você, tá incompleto mas você pode adicionar mais coisas e fazer o que quiser com o código. Basta você chegar perto de um veículo, apertar 'M' para fazer o cursor aparecer e clicar em cima de um veículo.


-- client-sideaddEventHandler ( "onClientClick", root, function ( _, _, _, _, _, _, _, clickedElement )	if ( clickedElement ) then				if ( getElementType ( clickedElement ) == "vehicle" ) then			triggerServerEvent ( "onClientRequestRepair", localPlayer, clickedElement );		end			end	endbindKey ( "M", "down", function ( )		showCursor ( not isCursorShowing ( ) );	end )-- server-sideaddEvent ( "onClientRequestRepair", true );addEventHandler ( "onClientRequestRepair", root, function ( element )		local ePos 		= getElementPosition ( element );	local pPos 		= getElementPosition ( source );	local distance	= getDistanceBetweenPoints3D ( ePos[1], ePos[2], ePos[3], pPos[1], pPos[2], pPos[3] );		if ( distance > 3 ) then		return outputChatBox ( "* ERRO: O veículo não está próximo de você.", source, 255, 0, 0 );	end		fixVehicle ( element );	end )

Como eu disse, tá incompleto. Altere ou faça mais coisas no server-side, creio eu que não seja necessário mexer no client-side.

Está faltando um ) http://prntscr.com/lui3ex
Obs:Ignora o nome do script rsrs

Edited by +[T]rakin
Link to comment
12 minutes ago, Lord Henry said:

addEventHandler ( "onClientClick", root, function ( _, state, _, _, _, _, _, clickedElement )	if not (state == "up") then return end	if ( clickedElement ) then      -- Continua o resto

 

Thanks , vou muda um pouco do cliente para abrir um painel por que exemplo eu abro o painel admin e tem um veiculo da frente vai meio que funciona o sistema de reparar tambem.

Link to comment
5 hours ago, +[T]rakin said:

Thanks , vou muda um pouco do cliente para abrir um painel por que exemplo eu abro o painel admin e tem um veiculo da frente vai meio que funciona o sistema de reparar tambem.

Faça com que detecte os clicks apenas quando for habilitado o cursor pelo M:

function detectar(_, state, _, _, _, _, _, clickedElement)
	if ( state == "up" and clickedElement ) then
		if ( getElementType ( clickedElement ) == "vehicle" ) then
			triggerServerEvent ( "onClientRequestRepair", localPlayer, clickedElement );
		end
	end
end

bindKey ( "M", "down", function ( )
	if (not isCursorShowing())  then
		showCursor(true) 
		addEventHandler("onClientClick", root, detectar)
	else
		showCursor(false)
		removeEventHandler("onClientClick", root, detectar)
	end
end )

 

  • Thanks 1
Link to comment
8 minutes ago, MaligNos said:

Faça com que detecte os clicks apenas quando for habilitado o cursor pelo M:


function detectar(_, state, _, _, _, _, _, clickedElement)	if ( state == "up" and clickedElement ) then		if ( getElementType ( clickedElement ) == "vehicle" ) then			triggerServerEvent ( "onClientRequestRepair", localPlayer, clickedElement );		end	endendbindKey ( "M", "down", function ( )	if (not isCursorShowing())  then		showCursor(true) 		addEventHandler("onClientClick", root, detectar)	else		showCursor(false)		removeEventHandler("onClientClick", root, detectar)	endend )

 

Opa jovem muito obrigado pela essa ajuda ficou muito grato com isso.

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