Sparta Posted August 24, 2019 Share Posted August 24, 2019 (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 August 24, 2019 by Sparta Link to comment
Jonas^ Posted August 24, 2019 Share Posted August 24, 2019 (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 August 24, 2019 by Jonas^ Correção. 1 Link to comment
DNL291 Posted August 24, 2019 Share Posted August 24, 2019 Movido para Portuguese / Português > Programação em Lua @Sparta Link to comment
Sparta Posted August 27, 2019 Author Share Posted August 27, 2019 (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 August 27, 2019 by Sparta Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now