Developer. Posted July 18, 2019 Share Posted July 18, 2019 Iae rapaziada, bom estou com um certo problema em um painel q estou criado basicamente o Painel funciona da seguinte forma: O Player ao passar por uma determinada Marker, abre-se o painel onde ele terá uma quantidade de opções dentre elas "Armamentos, Uniformes e a parte de iniciar/finalizar seu expediente (painel voltado mais para corporações!). O problema esta na parte do Expediente o mesmo funciona da seguinte forma: Tem dois Ícones (print abaixo), o Painel Menor contém dois ícones, sendo o Primeiro ( soldado prestando Continência) o Inicio do Expediente e o Segundo o termino Ao iniciar o trabalho o Player receberá uma mensagem e 1 hora após o Inicio receberá seu salario no valor X (não decidi ainda) --> Esta primeira parte eu consegui fazer porém A segunda parte que seria Terminar o trabalho é onde esta o Problema. Ao Iniciar ele recebe este valor porém ao terminar o intuito é que o valor X pare de ser dado ao Player... tentei diversos jeitos porém não tive exito -->> Script logo Abaixo do Print!! Script Client-Side o Problema se encontra Próximo as linhas 280/310 local screenW,screenH = guiGetScreenSize() local resW, resH = 1360,768 local x, y = (screenW/resW), (screenH/resH) local pPrin = false local pPatru = false local pAcao = false local pPcolete = false local pParmas = false local pJob = false function painelPrincipal() dxDrawRectangle(x*43, y*167, x*235, y*25, tocolor(215, 0, 0, 254), false) dxDrawRectangle(x*43, y*191, x*235, y*314, tocolor(0, 0, 0, 194), false) dxDrawText("EQUIPAMENTOS", x*106, 169, x*243, y*191, tocolor(255, 255, 255, 255), 1.00, "sans", "left", "top", false, false, false, false, false) dxDrawRectangle(x*53, y*216, x*100, y*25, tocolor(0, 0, 0, 217), false) dxDrawText("Patrulhamento", x*63, y*220, x*132, y*237, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawRectangle(x*168, y*216, x*100, y*25, tocolor(0, 0, 0, 217), false) dxDrawText("Ação", x*203, y*220, x*278, y*241, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawRectangle(x*252, y*167, x*26, y*25, tocolor(0, 0, 0, 217), false) dxDrawText("X", x*262, y*170, x*269, y*192, tocolor(255, 255, 255, 255), 1.00, "default", "left", "top", false, false, false, false, false) end function painelPatrulhamento() -- Painel Patru dxDrawImage(x*69, y*267, x*63, y*59, ":[PainelArmas]/imgs/coleteLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*184, y*267, x*62, y*58, ":[PainelArmas]/imgs/ia2Logo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*74, y*363, x*58, y*56, ":[PainelArmas]/imgs/jobLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*188, y*367, x*48, y*47, ":[PainelArmas]/imgs/uniformLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end function painelPtColete() -- Patru Colete dxDrawRectangle(x*288, y*167, x*145, y*25, tocolor(215, 0, 0, 254), false) dxDrawRectangle(x*288, y*192, x*145, y*59, tocolor(0, 0, 0, 187), false) dxDrawImage(x*298, y*199, x*54, y*52, ":[PainelArmas]/imgs/coleteLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*375, y*202, x*48, y*46, ":[PainelArmas]/imgs/vidaLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end function painelPtArmas() -- Patru Armas dxDrawRectangle(x*288, y*167, x*192, y*25, tocolor(215, 0, 0, 254), false) dxDrawRectangle(x*288, y*192, x*192, y*215, tocolor(0, 0, 0, 187), false) dxDrawImage(x*298, y*202, x*62, y*58, ":[PainelArmas]/imgs/ia2Logo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- ptarma1 dxDrawImage(x*398, y*201, x*68, y*65, ":[PainelArmas]/imgs/taserLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- ptarma2 dxDrawImage(x*304, y*281, x*50, y*48, ":[PainelArmas]/imgs/shotLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- ptarma3 dxDrawImage(x*406, y*281, x*50, y*49, ":[PainelArmas]/imgs/sprayLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- ptarma4 dxDrawImage(x*304, y*345, x*53, y*52, ":[PainelArmas]/imgs/caceteteLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- ptarma5 end function painelJob() dxDrawRectangle(x*288, y*167, x*143, y*25, tocolor(215, 0, 0, 254), false) dxDrawRectangle(288, y*192, x*143, y*65, tocolor(0, 0, 0, 187), false) dxDrawImage(x*298, y*200, x*48, y*47, ":[PainelArmas]/imgs/jobLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*370, y*201, x*47, y*47, ":[PainelArmas]/imgs/exitLogo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end function painelAcao() end ----- Abrir-Fechar Painel Principal ---------- function abrir (_,state) if pPrin == false then showCursor(true) addEventHandler("onClientRender", root, painelPrincipal) pPrin = true if not fontScale then fontScale = screenW/225 end tick1 = getTickCount() else showCursor(false) removeEventHandler("onClientRender", root, painelPrincipal) pPrin = false end end addEvent("PArmas", true) addEventHandler("PArmas", root , abrir) function fechar (_,state) if pPrin == true then if state == "down" then if isCursorOnElement(x*252, y*167, x*26, y*25 ) then showCursor(false) removeEventHandler("onClientRender", root, painelPrincipal) removeEventHandler("onClientRender", root, painelAcao) -- Painel Ação removeEventHandler("onClientRender", root, painelPatrulhamento) -- Painel Patru removeEventHandler("onClientRender", root, painelPtColete) -- Patru Colete removeEventHandler("onClientRender", root, painelPtArmas) -- Patru Armas removeEventHandler("onClientRender", root, painelJob) -- Patru Job pPrin = false pAcao = false pPatru = false pPcolete = false pParmas = false pJob = false end end end end addEventHandler ("onClientClick", root, fechar) function AbrirPatru(_,state) if pPrin == true then if pPatru == false then if state == "down" then if isCursorOnElement(x*53, y*216, x*100, y*25 ) then addEventHandler("onClientRender", root, painelPatrulhamento) -- Painel Patru removeEventHandler("onClientRender", root, painelAcao) -- Painel Ação pPatru = true pAcao = false end end end end end addEventHandler ("onClientClick", root, AbrirPatru) function AbPtColete(_,state) if pPatru == true then if pPcolete == false then if state == "down" then if isCursorOnElement(x*69, y*267, x*63, y*59 ) then addEventHandler("onClientRender", root, painelPtColete) -- Patru Colete removeEventHandler("onClientRender", root, painelPtArmas) -- Patru Armas removeEventHandler("onClientRender", root, painelJob) -- Patru Job pPcolete = true pParmas = false pJob = false end end end end end addEventHandler ("onClientClick", root, AbPtColete) function PgPtColete(_,state) if pPcolete == true then if state == "down" then if isCursorOnElement(x*298, y*199, x*54, y*52 ) then triggerServerEvent("colete", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtColete) function PgPtVida(_,state) if pPcolete == true then if state == "down" then if isCursorOnElement(x*375, y*202, x*48, y*46 ) then triggerServerEvent("vida", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtVida) ------------------------------------------------------------------------------------------------------------ function AbPtArmas(_,state) if pPatru == true then if pParmas == false then if state == "down" then if isCursorOnElement(x*184, y*267, x*62, y*58 ) then addEventHandler("onClientRender", root, painelPtArmas) -- Patru Armas removeEventHandler("onClientRender", root, painelPtColete) -- Patru Colete removeEventHandler("onClientRender", root, painelJob) -- Patru Job pParmas = true pPcolete = false pJob = false end end end end end addEventHandler ("onClientClick", root, AbPtArmas) function PgPtArma1(_,state) -- ptarma1 if pParmas == true then if state == "down" then if isCursorOnElement(x*298, y*202, x*62, y*58 ) then triggerServerEvent("M4", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtArma1) function PgPtArma2(_,state) -- ptarma2 if pParmas == true then if state == "down" then if isCursorOnElement(x*398, y*201, x*68, y*65 ) then triggerServerEvent("taser", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtArma2) function PgPtArma3(_,state) -- ptarma3 if pParmas == true then if state == "down" then if isCursorOnElement(x*304, y*281, x*50, y*48 ) then triggerServerEvent("shot", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtArma3) function PgPtArma4(_,state) -- ptarma4 if pParmas == true then if state == "down" then if isCursorOnElement(x*406, y*281, x*50, y*49 ) then triggerServerEvent("spray", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtArma4) function PgPtArma5(_,state) -- ptarma5 if pParmas == true then if state == "down" then if isCursorOnElement(x*304, y*345, x*53, y*52 ) then triggerServerEvent("stick", localPlayer) end end end end addEventHandler ("onClientClick", root, PgPtArma5) ------------------------------------------------------------------------------------------------------------ function AbJob(_,state) if pPatru == true then if pJob == false then if state == "down" then if isCursorOnElement(x*74, y*363, x*58, y*56 ) then addEventHandler("onClientRender", root, painelJob) -- Patru Job removeEventHandler("onClientRender", root, painelPtColete) -- Patru Colete removeEventHandler("onClientRender", root, painelPtArmas) -- Patru Armas pJob = true pPcolete = false pParmas = false end end end end end addEventHandler ("onClientClick", root, AbJob) function IniJobCl(_,state) -- IniJob if pJob == true then if state == "down" then if isCursorOnElement(x*298, y*200, x*48, y*47 ) then outputChatBox("Iniciou", 0, 255, 0) local tempo = setTimer ( function() givePlayerMoney(500) outputChatBox("Salario", 255, 0, 0) end, 10000, 5 ) end end end end addEventHandler ("onClientClick", root, IniJobCl) function ExitJob(_,state) -- ExitJob if pJob == true then if state == "down" then if isCursorOnElement(x*370, y*201, x*47, y*47 ) then outputChatBox("Terminou", 0, 255, 0) if isTimer ( tempo ) then killTimer ( tempo ) end end end end end addEventHandler ("onClientClick", root, ExitJob) function AbrirAcao(_,state) if pPrin == true then if pAcao == false then if state == "down" then if isCursorOnElement(x*168, y*216, x*100, y*25 ) then addEventHandler("onClientRender", root, painelAcao) -- Painel Ação removeEventHandler("onClientRender", root, painelPatrulhamento) -- Painel Patru pAcao = true pPatru = false end end end end end addEventHandler ("onClientClick", root, AbrirAcao) function isCursorOnElement(x,y,w,h) local mx,my = getCursorPosition () local fullx,fully = guiGetScreenSize() cursorx,cursory = mx*fullx,my*fully if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then return true else return false end end Decidi fazer no Cliente pelo fato de que no Server-side não estava tendo exito até que percebi que setTimer e GivePlayerMoney são funções Shared's adendo: estou usando setTimer pois ainda não compreendi a função getTickCount (estou tentando aprender ) Link to comment
Other Languages Moderators Lord Henry Posted July 18, 2019 Other Languages Moderators Share Posted July 18, 2019 (edited) 7 hours ago, Eder said: GivePlayerMoney são funções Shared's Não exatamente. O givePlayerMoney é considerado server-side, pois ao ser feito client-side, ele apenas muda o dinheiro na HUD do jogador, mas ele não fica com aquela nova quantidade de grana no servidor. Ele aparece como both-side (shared) na Wiki pois a função funciona em ambos os lados. As vezes você quer realmente dar um "dinheiro falso" pro jogador e dai vc usa client-side de propósito. É só ler a anotação que aparece na Wiki: Note: Using this function client side (not recommended) will not change a players money server side. Quanto ao seu setTimer, você não vai conseguir cancelá-lo pois você fez ele local. Isso significa que a variável dele só pode ser acessada dentro daquele escopo onde ele foi criado. Edited July 18, 2019 by Lord Henry 1 Link to comment
Developer. Posted August 4, 2019 Author Share Posted August 4, 2019 On 18/07/2019 at 10:55, Lord Henry said: Não exatamente. O givePlayerMoney é considerado server-side, pois ao ser feito client-side, ele apenas muda o dinheiro na HUD do jogador, mas ele não fica com aquela nova quantidade de grana no servidor. Ele aparece como both-side (shared) na Wiki pois a função funciona em ambos os lados. As vezes você quer realmente dar um "dinheiro falso" pro jogador e dai vc usa client-side de propósito. É só ler a anotação que aparece na Wiki: Note: Using this function client side (not recommended) will not change a players money server side. Quanto ao seu setTimer, você não vai conseguir cancelá-lo pois você fez ele local. Isso significa que a variável dele só pode ser acessada dentro daquele escopo onde ele foi criado. Depois de muitas tentativas consegui fazer o script funcionar totalmente kkk. Aprendi como usar o addEvent direito e o set Timer tive exito tudo no server.Lua mesmo! Brigadão mano seu comment foi tipo uma luz no fim do túnel 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