Jump to content

Anti-Bind


Recommended Posts

  • Moderators
Posted

Vc está fazendo isso client-side?

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
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)

 

  • Moderators
Posted

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)

 

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

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

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