Jump to content

[AYUDA]Activar comandos con combinaciones de tecla


Recommended Posts

¿Es posible una forma server-side de que al presionar dos o tres teclas se active una función?

 

Sé que existen los binds para activarlas, pero lo que busco es activar comandos mediante combinación de teclas por ejemplo (CLICK DERECHO + L) el jugador haga una animación.

  Conozco la forma client-side con "getKeyState" pero busco una forma de hacerlo con server-side.

 

Gracias!

Link to comment
3 hours ago, Ryuto said:

¿Crees que puedas darme un ejemplo? todavia no lo entiendo del todo.

 function bind(_, state)
    if state == "down" then 
	   bindKey("v", "down", myFunction)
	else
	   unbindKey("v", "down", myFunction)	 
	end 
 end 
 bindKey("lctrl", "up", bind)
 bindKey("lctrl", "down", bind)
 
 function myFunction()
    
 	unbindKey("v", "down", myFunction)	 
 end 

 

Link to comment
On 08/05/2021 at 16:59, #Dv^ said:

Quizás puedas intentar usar onClientKey o getKeyState desde el lado client-side, que cuando haga la combinación de teclas uses triggerServerEvent para sincronizar al jugador que usó la combinación.

Ok, gracias! Por ejemplo, yo tengo un script server side que se activa por comando es el siguiente:

function CrearCaja(jugador1)

local nivel = (getElementData(jugador1, "Level") or 0)

if (nivel<=10) then
triggerClientEvent(jugador1,  "TextoNivelRequerido",  jugador1)
      return end

if (nivel>=10) then

local x, y, z = getElementPosition(jugador1)
local r = getPedRotation(jugador1)

caja1 = createObject(1230, x - math.sin( math.rad( -r )) * ( 1.25 ), y - math.cos( math.rad( -r )) * (1.25), z + 1, 0, 0, 0)

setTimer(destroyElement, 5000, 1, caja1)

   end
end
addCommandHandler ( "caja1", CrearCaja)

Esto crea un objeto en frente del jugador, quisiera que en vez de comando se activase con combinaciones de teclas, por ejemplo:  CTRL + A + B, traté usando getKeyState pero me da error por el argumento "jugador1" en el server-side.. y no quiero cambiar esa variable por "source", quisiera mantenerla así como "jugador1", esto es lo que hice en el client side:

function Combinacion()

if getKeyState ("lctrl") == true and getKeyState ("A") == true and getKeyState ("B") == true then

triggerServerEvent ("CreacionCaja", localPlayer)

end
   end

Esto intente y al pulsar las teclas me daba error en el argumento 1 del triggerClientEvent y el getElementData

Link to comment

Espero te sirva este, no lo revisé bien.

-- Client-side
addEventHandler("onClientKey", root, function(button, press)
	if button == "lctrl" then
		setElementData(localPlayer, "lctrl", press and true or false, false)
	end

	if button == "a" and press then
		local pressed = getElementData(localPlayer, "lctrl") or false
		if pressed then
			print("lctrl + a combination was pressed!")

			triggerServerEvent("createbox", localPlayer)
		end
	end
end)

-- Server-side
function creabox(jugador1)
	local nivel = (getElementData(jugador1, "Level") or 0)
	if (nivel<=10) then
		triggerClientEvent(jugador1,  "TextoNivelRequerido",  jugador1)
    	return 
    end

	if (nivel>=10) then
		local x, y, z = getElementPosition(jugador1)
		local r = getPedRotation(jugador1)

		caja1 = createObject(1230, x - math.sin( math.rad( -r )) * ( 1.25 ), y - math.cos( math.rad( -r )) * (1.25), z + 1, 0, 0, 0)

		setTimer(destroyElement, 5000, 1, caja1)
	end
end
addCommandHandler("caja1", createbox)

addEvent("createbox", true)
addEventHandler("createbox", root, function()
	createbox(source)
end)

 

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