Sparta

AJUDA COM ACL

Recommended Posts

Posted (edited)

O código abaixo é de uma agência de emprego, os empregos veio todos prontos só que não tinha o de mecânico e fui e adicionei, porém para ser mecânico o mod requer o usuário em um grupo na acl, queria ajuda para quando o player pegar o trabalho de mecânico se adicionado automaticamente no grupo da acl e quando pedir demissão ser retirado.

 

 

Trabalhos = {
{"Lixeiro", 0, "Nenhuma" }, -- Emprego, Level, Habilitação
{"Carregador", 3,"Nenhuma" }, 
{"Pizzaboy", 7, "A"}, 
{"Sedex", 10, "C"}, 
{"Caminhoneiro", 15, "D"}, 
{"Mecânico", 15, "C" }, 
{"Pescaria", 25, "Nenhuma"}, 
{"Mineirador", 60, "Nenhuma"},
}

 

Edited by Sparta

Share this post


Link to post
Posted (edited)

1. Pra fazer isso, você precisa fazer com que o client ligue para o servidor e avise, (coloque tal jogador em tal acl) pois o painel só é possível criar do lado client já que o jogador precisa pressionar um botão pra ser adicionado na acl e pra isso iremos utilizar TriggerServerEvent.

Sabendo dessa primeira informação, então vamos lá!

Fiz um painel de exemplo e comentei as linhas pra você entender, tentei ser o mais breve possível pra você entender, até porque isso é algo bem simples.

Client:

local sX, sY = guiGetScreenSize ()

addEventHandler ("onClientResourceStart", resourceRoot, function ()
	mainWindow = guiCreateWindow (sX/2 - 155, sY/2 - 115, 310, 230, "", false)
	guiWindowSetSizable (mainWindow, false)
	showCursor (true)
	guiSetProperty (mainWindow, "TitlebarEnabled", "False")
	guiSetProperty (mainWindow, "CloseButtonEnabled", "False")
	btnPegar = guiCreateButton (85, 80, 140, 30, "Pegar Emprego", false, mainWindow)
	btnSair = guiCreateButton (85, 122, 140, 30, "Sair Emprego", false, mainWindow)    
	btnClose = guiCreateButton (266, 195, 34, 25, "x", false, mainWindow)  
end)	

addEventHandler ("onClientGUIClick", guiRoot, function (btn)
	if btn ~= "left" then return end -- Se o botão clicado do mouse não for o esquerdo, cancela a função e nada acontece.
	if source == btnPegar then -- Se o botão clicado for o botão de btnPegar, então:
		triggerServerEvent ("onRequestPegarEmprego", localPlayer, "pegarEmprego") -- Enviamos para o servidor setar o jogador na acl.
	elseif source == btnSair then -- Se o botão clicado for o botão de btnSair, então:
		triggerServerEvent ("onRequestPegarEmprego", localPlayer, "sairEmprego") -- Enviamos para o servidor tirar o jogador da acl.
	elseif source == btnClose then -- Se o botão clicado for o botão de btnClose, então:
		guiSetVisible (mainWindow, false)
		showCursor (false)
	end
end)

Server:

function confirmTrampo (type, join, leave)
	if (type == "pegarEmprego") then -- Se a string enviada pelo client for "pegarEmprego", então:
		if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (client)), aclGetGroup("Mecanico"))) then -- Se o jogador já estiver na acl "Mecanico", então:
			outputChatBox ("Você já está no trabalho de mecanico!", client, 255, 30, 30)
		else -- Senão:
			aclGroupAddObject (aclGetGroup("Mecanico"), "user."..getAccountName (getPlayerAccount (client))) -- Coloca o jogador na acl "Mecanico".
			outputChatBox ("Parabéns! Agora você está trabalhando de mecânio!", client, 0, 255, 0)
		end	
	elseif (type == "sairEmprego") then	-- Se a string enviada pelo client for "sairEmprego", então:
		if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (client)), aclGetGroup("Mecanico"))) then -- Se o jogador estiver na acl "Mecanico", então:
			aclGroupRemoveObject (aclGetGroup("Mecanico"), "user."..getAccountName (getPlayerAccount (client))) -- Remove o jogador da acl "Mecanico".
			outputChatBox ("Você saiu do trabalho de mecânico!", client, 0, 255, 0)
		else
			outputChatBox ("Você não está no trabalho de mecânico!", client, 255, 30, 30)
		end	
	end	
end	
addEvent ("onRequestPegarEmprego", true)
addEventHandler ("onRequestPegarEmprego", root, confirmTrampo)

É aqui onde a mágica acontece, onde recebe as informações do client e seta o jogador na acl, então preste bastante atenção nessa parte.

                                                                                                                                                                                                                                                                          Espero ter ajudado, boa tarde :)

Edited by Jonas^
Correção.
  • Like 1

Share this post


Link to post
Posted (edited)

Aconteceu uns problemas e eu não pude responder antes, eu testei ele dentro do script da agência e não funcionou além de usar outro painel e colocar if (type == "pegarEmprego"), que ta abrangendo todos empregos, mas a questão principal era incluir ele dentro do painel da agência, mas não consegui sou um pouco leigo no assunto.

OBS: No painel de emprego da agencia eu consegui adicionar  o nome do emprego e o requisito do  level e funciona até com a hud que mostra seu emprego, quero ao pegar o emprego de mecânico ser incluído no grupo "Mecanico" da acl.

 

Código da agencia original.

SERVE

-- Pegar Trabalho         

function Pegar_Emprego (source, Trab, Level, Hab)
	local Trabalho = getElementData ( source, "Emprego" ) or "Desempregado"
	local Habilicao = getElementData ( source, "DNL:Categoria("..Hab..")")
	local Level_Player = tonumber(getElementData(source, "Level")) or 0   
	if Level_Player >= tonumber(Level) then 
		if Trabalho == Trab then triggerClientEvent(source, "addNotification", root, "#ffffffINFO: #ffffffVocê Já Trabalha Como #106FE7"..Trab.."", "info") return end
		if Habilicao == false then triggerClientEvent(source, "addNotification", root, "#ffffffErro: #ffffffVocê Não Tem Habilitação ("..Hab..") e Não Pode Trabalhar Como ("..Trab..")", "erro") return end
		setElementData ( source, "Emprego", Trab )
		triggerClientEvent(source, "addNotification", root, "#ffffffINFO: #ffffffVocê Agora Trabalha de #106FE7"..Trab.."", "info")
	else
		triggerClientEvent(source, "addNotification", root, "#ffffffErro: #ffffffSeu Level é Muito Baixo e Você Não Pode Trabalhar Como #106FE7"..Trab.."", "erro")
	end
end
addEvent("DNL:Pegar_Emprego", true)
addEventHandler("DNL:Pegar_Emprego", root, Pegar_Emprego)


-- Demissao Trabalho         
      
function Pedir_Demissao (source)
	local Trabalho = getElementData ( source, "Emprego" ) or "Desempregado"
	if Trabalho == "Desempregado" then triggerClientEvent(source, "addNotification", root, "#ffffffErro: #ffffffVocê não está empregado para se demitir.", "erro") return end
	setElementData ( source, "Emprego", "Desempregado" )
	triggerClientEvent(source, "addNotification", root, "#ffffffSucesso: #ffffffVocê Se Demitiu Do Emprego de #106FE7"..Trabalho.."", "sucesso")
end
addEvent("DNL:Pedir_Demissao", true)
addEventHandler("DNL:Pedir_Demissao", root, Pedir_Demissao)

Não sei se é necessário mas ta aqui o código de trabalho de mecânico


Grupo = "Mecanico" -- Grupo da Acl!
Preco_Kit = 500 -- Preço do kit!
LimiteReparoMec = 20 --  Limite de Kit!



--Infos Trabalho       



function Info (source)
accountname = getAccountName(getPlayerAccount(source))
 if isObjectInACLGroup("user." .. accountname, aclGetGroup(Grupo)) then
	outputChatBox("#00ff00=====================================================", source, 255, 255, 255, true)  
	outputChatBox("#00FF00", source, 255, 255, 255, true)  
	outputChatBox("#00ff00/qg - #ffffffPara Marcar seu Local de Trabalho no Mapa.", source, 255, 255, 255, true)  
	outputChatBox("#00FF00", source, 255, 255, 255, true)  
	outputChatBox("#00ff00Trabalhar - #ffffffClique no veiculo Para Repara-lo.", source, 255, 255, 255, true)  
	outputChatBox("#00FF00", source, 255, 255, 255, true)  
	outputChatBox("#00ff00=====================================================", source, 255, 255, 255, true) 
  end
end
addCommandHandler ( "infos", Info )

function Quartel_Emprego ( source )
accountname = getAccountName(getPlayerAccount(source))
 if isObjectInACLGroup("user." .. accountname, aclGetGroup(Grupo)) then
	if isElementVisibleTo ( Blip_Emprego, source ) then
	   setElementVisibleTo ( Blip_Emprego, source, false )
	   exports.Scripts_Dxmessages:outputDx(source, "Seu Local de Trabalho foi Desmarcado do Mapa!", "info")
	else
	   setElementVisibleTo ( Blip_Emprego, source, true )
	   exports.Scripts_Dxmessages:outputDx(source, "Seu Local de Trabalho foi Marcado no Mapa!", "info")
	end
  end	
end    
addCommandHandler ( "qg", Quartel_Emprego )



-- Trabalho           

AbrirPainelMecanico = createMarker(1481.7296142578,-1767.330078125,18.795755386353 -1, "cylinder", 1.2, 0, 255, 0, 50)
setElementVisibleTo ( AbrirPainelMecanico, root, true )

Blip_Emprego = createBlipAttachedTo( AbrirPainelMecanico, 42 )
setElementVisibleTo ( Blip_Emprego, root, false )

function OpenPainelMed(source)
accountname = getAccountName(getPlayerAccount(source))
 if isObjectInACLGroup("user." .. accountname, aclGetGroup(Grupo)) then
   if isElementWithinMarker(source, AbrirPainelMecanico) then
	  triggerClientEvent(source,"MEC:Painel",source)	 
	  setElementVisibleTo ( Blip_Emprego, source, false )
   end
  else
	exports.Scripts_Dxmessages:outputDx(source, "Apenas Mecânicos podem entrar aqui!", "warning")
  end
end
addEventHandler( "onMarkerHit", AbrirPainelMecanico, OpenPainelMed )

 

Edited by Sparta

Share this post


Link to post

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.