Jump to content

[AJUDA] Reparar carro distancia


Recommended Posts

Posted

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)

 

Posted

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
Posted

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é?

Posted

Infelizmente não conheço nenhuma função que possa ser usado juntamente com addCommandHandler que repare um veiculo especifico. Espero que outra pessoa possa  te ajudar com isso :D

  • Like 1
Posted
1 minute ago, danilin said:

Infelizmente não conheço nenhuma função que possa ser usado juntamente com addCommandHandler que repare um veiculo especifico. Espero que outra pessoa possa  te ajudar com isso :D

Ok obg pela força.

Obs: Eu vi do servidor Infinity ai gostei muito

  • Other Languages Moderators
Posted (edited)

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
Posted (edited)
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
Posted (edited)
13 hours ago, DNL291 said:

Só colocar um ')' na linha 12 do código do asrzk.

Sim tinha resolvido mas acabou a energia e não deu para avisa.

Gostei muito dessa forma o unico problema é que da dois click e isso acabar meio que bugando as mensagens.
 

Edited by +[T]rakin
  • Other Languages Moderators
Posted
addEventHandler ( "onClientClick", root, function ( _, state, _, _, _, _, _, clickedElement )
	if not (state == "up") then return end
	if ( clickedElement ) then
      -- Continua o resto

 

  • Thanks 1
Posted
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.

Posted (edited)
5 hours ago, Lord Henry said:

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

 

@Lord Henry Infelizmente testei aqui e não funcionou tipo quando clico do veiculo nem reparar ele.

Edited by +[T]rakin
Posted
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
Posted
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.

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