Jump to content

Anti Kill Team (ACL)


Recommended Posts

  • Other Languages Moderators

Não. Tem que estar no mesmo team.

Também daria pra fazer isso cancelando o dano que o player recebe no evento onClientPlayerDamage. Mas isso é feito client-side e a verificação de ACL tem que ser server-side.

 

Edited by Lord Henry
Link to comment
On 17/07/2018 at 14:49, Lord Henry said:

Não. Tem que estar no mesmo team.

Também daria pra fazer isso cancelando o dano que o player recebe no evento onClientPlayerDamage. Mas isso é feito client-side e a verificação de ACL tem que ser server-side.

 

Voce fala assim no Client .

function AntKill ()
 cancelEvent ()
end
addEventHandler("onClientPlayerDamage",getRootElement(),AntKill)

Link to comment

Realmente não sei porque a galera do brasil ainda teima em fazer o sistema de ACL como se fosse de team, cada um tem um proposito...

Tal tarefa seria bem mais fácil se estivesse usando as funcionalidades especificas de team!

Enfim, tentei criar um script aqui rapidão, que talvez consiga suprir suas necessidades...

server-side

local update = 5 -- min
setTimer(function()
	for _,player in ipairs(getElementsByType("player")) do
		local account = getPlayerAccount(player)
		if (account) and not (isGuestAccount(account)) then
			local acl = {}
			local accountName = getAccountName(account)
			local objectString = "user."..accountName
			for _,group in ipairs(aclGroupList()) do
				if (isObjectInACLGroup(objectString, group)) then
					local groupName = aclGroupGetName(group)
					table.insert(acl,groupName)
				end
			end
			if #acl > 0 then setElementData(player,"acls",acl) end
		end
	end
end,update*60000,0)

client-side

addEventHandler ( "onClientPlayerDamage", getLocalPlayer(),
	function(attacker)
		local aclAttacker = getElementData(attacker,"acls") or false
		local aclSource = getElementData(source,"acls") or false
		local allowAttack = true
		if (aclAttacker and aclSource) then
			for _,aclName in ipairs(aclAttacker) do
				for _,aclName2 in ipairs(aclSource) do
					if aclName == aclName2 then
						allowAttack = false
						break
					end
				end
				if not allowAttack then break end
			end
		end
		if not allowAttack then cancelEvent() end
	end
)

Não testei, e nem sei se esta é a melhor forma de fazer isso!

Edited by MaligNos
  • Like 1
Link to comment
  • Other Languages Moderators
19 hours ago, MaligNos said:

Realmente não sei porque a galera do brasil ainda teima em fazer o sistema de ACL como se fosse de team, cada um tem um proposito...

Tal tarefa seria bem mais fácil se estivesse usando as funcionalidades especificas de team!

Enfim, tentei criar um script aqui rapidão, que talvez consiga suprir suas necessidades...

[...]

Não testei, e nem sei se esta é a melhor forma de fazer isso!

Concordo.

E está correta a sua ideia em setar as ACLs do jogador como element data, assim ela pode ser lida facilmente no client sem ficar usando triggers. Fazer a verificação direto no server seria inviável e pesado no processamento, visto que cada vez que cada jogador tomar dano, o client precisaria de um triggerServerEvent para verificar isso no server, o que acaba consumindo muito processamento.

  • Like 1
Link to comment
On 19/07/2018 at 18:27, MaligNos said:

Realmente não sei porque a galera do brasil ainda teima em fazer o sistema de ACL como se fosse de team, cada um tem um proposito...

Tal tarefa seria bem mais fácil se estivesse usando as funcionalidades especificas de team!

Enfim, tentei criar um script aqui rapidão, que talvez consiga suprir suas necessidades...

server-side


local update = 5 -- min
setTimer(function()
	for _,player in ipairs(getElementsByType("player")) do
		local account = getPlayerAccount(player)
		if (account) and not (isGuestAccount(account)) then
			local acl = {}
			local accountName = getAccountName(account)
			local objectString = "user."..accountName
			for _,group in ipairs(aclGroupList()) do
				if (isObjectInACLGroup(objectString, group)) then
					local groupName = aclGroupGetName(group)
					table.insert(acl,groupName)
				end
			end
			     
		
	

lado do cliente


   
	
		   
		   
		 
		  
			  
				  
					
 
						
					
				
				   
			
		
		   
	
)

Não testei, e nem sei se esta é a melhor forma de fazer isso!

Funcionou não.

Link to comment

Agora eu realmente testei, e funcionou como devia (testei com um ped)!  Uma observação, só iria fazer efeito 5 minutos após ativar o script, segue algumas melhorias abaixo no script do lado servidor:

local update = 5 -- min
local defaultAcls = {
	"Everyone",
	"Moderator",
	"SuperModerator",
	"Admin",
	"Console"
}

function setAclData(player)
	local account = getPlayerAccount(player)
	if (account) and not (isGuestAccount(account)) then
		local acl = {}
		local accountName = getAccountName(account)
		local objectString = "user."..accountName
		for _,group in ipairs(aclGroupList()) do
			if (isObjectInACLGroup(objectString, group)) then
				local isDefaultAcl = false
				local groupName = aclGroupGetName(group)
				for _,default in pairs(defaultAcls) do
					if (groupName == default) then
						isDefaultAcl = true
						break
					end
				end
				if (not isDefaultAcl) then
					table.insert(acl,groupName)
				end
			end
		end
		if #acl > 0 then setElementData(player,"acls",acl) end
	end
end

setTimer(function()
	for _,player in ipairs(getElementsByType("player")) do
		setAclData(player)
	end
end, update*60000, 0)

addEventHandler("onResourceStart", resourceRoot,
	function()
		for _,player in ipairs(getElementsByType("player")) do
			setAclData(player)
		end
	end
)

addEventHandler("onPlayerLogin", root,
	function()
		setAclData(source)
	end
)

Por padrão, todos usuários estão inclusos na ACL "Everyone" e pelo script anterior ninguém ia conseguir matar ninguém e nesse corrige isso, além de possibilitar que staffs também possam se matar....

Link to comment
1 hour ago, MaligNos said:

Agora eu realmente testei, e funcionou como devia (testei com um ped)!  Uma observação, só iria fazer efeito 5 minutos após ativar o script, segue algumas melhorias abaixo no script do lado servidor:


local update = 5 -- min
local defaultAcls = {
	"Everyone",
	"Moderator",
	"SuperModerator",
	"Admin",
	"Console"
}

function setAclData(player)
	local account = getPlayerAccount(player)
	if (account) and not (isGuestAccount(account)) then
		local acl = {}
		local accountName = getAccountName(account)
		local objectString = "user."..accountName
		for _,group in ipairs(aclGroupList()) do
			if (isObjectInACLGroup(objectString, group)) then
				local isDefaultAcl = false
				local groupName = aclGroupGetName(group)
				for _,default in pairs(defaultAcls) do
					if (groupName == default) then
						isDefaultAcl = true
						break
					end
				end
				if (not isDefaultAcl) then
					table.insert(acl,groupName)
				end
			end
		end
		if #acl > 0 then setElementData(player,"acls",acl) end
	end
end

setTimer(function()
	for _,player in ipairs(getElementsByType("player")) do
		setAclData(player)
	end
end, update*60000, 0)

addEventHandler("onResourceStart", resourceRoot,
	function()
		for _,player in ipairs(getElementsByType("player")) do
			setAclData(player)
		end
	end
)

addEventHandler("onPlayerLogin", root,
	function()
		setAclData(source)
	end
)

Por padrão, todos usuários estão inclusos na ACL "Everyone" e pelo script anterior ninguém ia conseguir matar ninguém e nesse corrige isso, além de possibilitar que staffs também possam se matar....

Funcionou não;

Link to comment

É, não sei o que ocorreu então, porque ao meu ver é funcional...

Enfim, já mais que mostrei uma possibilidade de se fazer isso, agora tente encontrar o porque de não estar funcionando ou tente outro tipo de solução, porque pelo que eu saiba tú @FeniXMTA é "scripter" pelo que falam no Facebook...

Link to comment
2 hours ago, MaligNos said:

É, não sei o que ocorreu então, porque ao meu ver é funcional...

Enfim, já mais que mostrei uma possibilidade de se fazer isso, agora tente encontrar o porque de não estar funcionando ou tente outro tipo de solução, porque pelo que eu saiba tú @FeniXMTA é "scripter" pelo que falam no Facebook...

Sim vlw ae,já arrumei.

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