Jump to content

Anti-Bind


Recommended Posts

1 minute ago, Lord Henry said:

Vc está fazendo isso client-side?

CLIENT-SIDE

disallowedCmds = {
	"say",
	"teamsay",
	"me",
	"Chat"
}
addEventHandler ("onClientKey", getRootElement(), function (button, state) -- Executa essa função quando o jogador pressionar ou soltar qualquer tecla.
	if not state then return end -- Não verifica ao soltar a tecla, somente ao pressionar.
	if not getElementData (localPlayer, "bindPermission") then -- Se o jogador não tem permissão para usar binds de texto, então:
		local keys = {} -- Obtém uma lista com todas as teclas com binds de texto.
		for i, cmd in ipairs (disallowedCmds) do -- Para cada comando da lista, faça:
			for ii, key in pairs (getBoundKeys (cmd)) do -- Para cada tecla com este comando da lista, faça:
				table.insert (keys, ii) -- Insere na lista keys, cada tecla bindada a cada comando da lista disallowedCmds.
			end
		end
		if keys then -- Se existe alguma tecla com bind de texto, então:
			for keyName, keyState in pairs (keys) do -- Para cada tecla com bind de texto, faça:
				if button == keyName then -- Se a tecla pressionada está com bind de texto, então:
					outputChatBox ("Tecla bloqueada, contém bind de texto tecla: "..keyName, 255, 0, 0) -- Avisa o jogador que essa tecla foi bloqueada.
					cancelEvent () -- Cancela o efeito dessa tecla como se ela nem tivesse sido usada.
					break -- Sai do loop do FOR para não precisar verificar as demais teclas com bind de texto.
				end
			end
		end
	end
end)

SERVER-SIDE

addEventHandler ("onResourceStart", getResourceRootElement(getThisResource()), function () -- Executa essa função ao iniciar este resource.
	local everybody = getElementsByType ("player") -- everybody é uma lista com todos os players conectados no servidor, incluindo os deslogados.
	for i, thePlayer in ipairs (everybody) do -- Para cada jogador que já está no servidor, faça:
		if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup("Console")) then -- Se este jogador está na ACL Group Console, então:
			setElementData (thePlayer, "bindPermission", true) -- Permite que este player use teclas com binds de texto.
		else -- Se ele não está na ACL Group Console, então:
			setElementData (thePlayer, "bindPermission", false) -- Proíbe que este player use teclas com binds de texto.
		end
	end
end)

addEventHandler ("onPlayerLogin", getRootElement(), function (prev, curr) -- Quando alguém fizer login, executa essa função.
	if isObjectInACLGroup ("user."..getAccountName(curr), aclGetGroup("Console")) then -- Se o jogador que fez login está na ACL Group Console, então:
		setElementData (source, "bindPermission", true) -- Permite que este player use teclas com binds de texto.
	end
end)

addEventHandler ("onPlayerLogout", getRootElement(), function (prev, curr) -- Quando alguém deslogar, executa essa função.
	setElementData (source, "bindPermission", false) -- Proíbe que o player deslogado use teclas com binds de texto.
end)

 

Link to comment
  • Other Languages Moderators

O comando /Chat é com C maiúsculo mesmo?

Bom, de qualquer forma descobri que ele gera erro sempre que o comando não está bindado em tecla nenhuma, então coloquei uma condição de verificação antes. Fiz uma série de outras correções também.

disallowedCmds = {
	"say",
	"teamsay",
	"me",
	"Chat" -- Prefira comandos com letra minúscula, para evitar que o jogador use Shift.
}

addEventHandler ("onClientKey", getRootElement(), function (button, state) -- Executa essa função quando o jogador pressionar ou soltar qualquer tecla.
	if not state then return end -- Não verifica ao soltar a tecla, somente ao pressionar.
	if not getElementData (localPlayer, "bindPermission") then -- Se o jogador não tem permissão para usar binds de texto, então:
		local keys = {} -- Obtém uma lista com todas as teclas com binds de texto.
		for i, cmd in ipairs (disallowedCmds) do -- Para cada comando da lista, faça:
			if getBoundKeys (cmd) then -- Se existe alguma tecla com este comando bindado, então:
				for ii, key in pairs (getBoundKeys (cmd)) do -- Para cada tecla com este comando da lista, faça:
					table.insert (keys, ii) -- Insere na lista keys, cada tecla bindada a cada comando da lista disallowedCmds.
				end
			end
		end
		if keys then -- Se existe alguma tecla com bind de texto, então:
			for _, keyName in pairs (keys) do -- Para cada tecla com bind de texto, faça:
				if button == tostring (keyName) then -- Se a tecla pressionada está com bind de texto, então:
					outputChatBox ("Tecla bloqueada, contém bind de texto tecla: "..keyName, 255, 0, 0) -- Avisa o jogador que essa tecla foi bloqueada.
					cancelEvent () -- Cancela o efeito dessa tecla como se ela nem tivesse sido usada.
					break -- Sai do loop do FOR para não precisar verificar as demais teclas com bind de texto.
				end
			end
		end
	end
end)

 

  • Thanks 1
Link to comment
17 hours ago, Lord Henry said:

O comando /Chat é com C maiúsculo mesmo?

Bom, de qualquer forma descobri que ele gera erro sempre que o comando não está bindado em tecla nenhuma, então coloquei uma condição de verificação antes. Fiz uma série de outras correções também.


disallowedCmds = {
	"say",
	"teamsay",
	"me",
	"Chat" -- Prefira comandos com letra minúscula, para evitar que o jogador use Shift.
}

addEventHandler ("onClientKey", getRootElement(), function (button, state) -- Executa essa função quando o jogador pressionar ou soltar qualquer tecla.
	if not state then return end -- Não verifica ao soltar a tecla, somente ao pressionar.
	if not getElementData (localPlayer, "bindPermission") then -- Se o jogador não tem permissão para usar binds de texto, então:
		local keys = {} -- Obtém uma lista com todas as teclas com binds de texto.
		for i, cmd in ipairs (disallowedCmds) do -- Para cada comando da lista, faça:
			if getBoundKeys (cmd) then -- Se existe alguma tecla com este comando bindado, então:
				for ii, key in pairs (getBoundKeys (cmd)) do -- Para cada tecla com este comando da lista, faça:
					table.insert (keys, ii) -- Insere na lista keys, cada tecla bindada a cada comando da lista disallowedCmds.
				end
			end
		end
		if keys then -- Se existe alguma tecla com bind de texto, então:
			for _, keyName in pairs (keys) do -- Para cada tecla com bind de texto, faça:
				if button == tostring (keyName) then -- Se a tecla pressionada está com bind de texto, então:
					outputChatBox ("Tecla bloqueada, contém bind de texto tecla: "..keyName, 255, 0, 0) -- Avisa o jogador que essa tecla foi bloqueada.
					cancelEvent () -- Cancela o efeito dessa tecla como se ela nem tivesse sido usada.
					break -- Sai do loop do FOR para não precisar verificar as demais teclas com bind de texto.
				end
			end
		end
	end
end)

 

Entendi, testei aqui e funcionou, sim eu uso com letra maiúscula pois eu uso uma tecla para acionar o comando do lado client-side, então não necessariamente o jogador vai usar o /Chat Ola mundo por exemplo.

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