#DeltaSCR Posted March 6, 2019 Share Posted March 6, 2019 Olá, estou com uma duvida em uma código que estou desenvolvendo... Teria de alguma forma eu meio que fazer uma tabela de markers? Por exemplo, se eum player passar em qualquer um desses markers execute uma, e essa função seria realizada em qualquer um desses markers... Pois são muitos markers, e se eu for fazer função por função ficaria muito longo o código; Como eu poderia fazer isso? Link to comment
[M]ister Posted March 6, 2019 Share Posted March 6, 2019 local markers = { {x,y,z}, -- coloque a posição do marker aqui {-2596.6, 579.3, 15.6}, -- exemplo1 {1202.8, 1001.5, 808.7} -- exemplo2 } addEventHandler ( "onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler( "onMarkerHit", marker, MarkerHit ) end end ) function MarkerHit( hitElement, matchingDimension ) local elementType = getElementType( hitElement ) outputChatBox( elementType.." inside myMarker", getRootElement(), 255, 255, 0 ) end Link to comment
#DeltaSCR Posted March 6, 2019 Author Share Posted March 6, 2019 1 hour ago, MaligNos said: local markers = { {x,y,z}, -- coloque a posição do marker aqui {-2596.6, 579.3, 15.6}, -- exemplo1 {1202.8, 1001.5, 808.7} -- exemplo2 } addEventHandler ( "onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler( "onMarkerHit", marker, MarkerHit ) end end ) function MarkerHit( hitElement, matchingDimension ) local elementType = getElementType( hitElement ) outputChatBox( elementType.." inside myMarker", getRootElement(), 255, 255, 0 ) end Então o que eu quero que seja executado o player passar no marker deve ser na primeira função? Link to comment
[M]ister Posted March 7, 2019 Share Posted March 7, 2019 4 hours ago, #DeltaSCR said: Então o que eu quero que seja executado o player passar no marker deve ser na primeira função? Quando passa no marker chama a função: MarkerHit (linha 17). Link to comment
#DeltaSCR Posted March 7, 2019 Author Share Posted March 7, 2019 10 hours ago, MaligNos said: Quando passa no marker chama a função: MarkerHit (linha 17). Os markers não estão sendo criados, e o debug não acusa nada Link to comment
[M]ister Posted March 7, 2019 Share Posted March 7, 2019 Mostre como ficou seu código. Link to comment
#DeltaSCR Posted March 7, 2019 Author Share Posted March 7, 2019 9 hours ago, MaligNos said: Mostre como ficou seu código. Está exatamente do jeito que você mandou, apenas alterei as coordenadas Link to comment
[M]ister Posted March 7, 2019 Share Posted March 7, 2019 37 minutes ago, #DeltaSCR said: Está exatamente do jeito que você mandou, apenas alterei as coordenadas Acabei de testar e funcionou para mim! Deixa eu ver como tú colocou as coordenadas. Link to comment
#DeltaSCR Posted March 9, 2019 Author Share Posted March 9, 2019 On 07/03/2019 at 18:57, MaligNos said: Acabei de testar e funcionou para mim! Deixa eu ver como tú colocou as coordenadas. OK, burrada minhas dos markers não aparecerem kkk, mas enfim... Agora estou com uma dúvida, quando o player passar no marker, vai chamar um evento client-side, porém não sei se os elementos e os parâmetros de função estão corretos... addEventHandler ("onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler ("onPlayerMarkerHit", marker, MarkerHit) end end ) function MarkerHit (hitElement, matchingDimension) local elementType = getElementType(hitElement) triggerClientEvent (source, "DeltaSCR:Abrir", getRootElement()) end Link to comment
Other Languages Moderators Lord Henry Posted March 9, 2019 Other Languages Moderators Share Posted March 9, 2019 Cadê a parte client-side? Link to comment
[M]ister Posted March 9, 2019 Share Posted March 9, 2019 Porque trocou o onMarketHit pelo onPlayerMarketHit ? Assim não vai funcionar (veja aqui) Olhe na wiki quais parâmetros são passados e o que significa cada um deles. Link to comment
#DeltaSCR Posted March 10, 2019 Author Share Posted March 10, 2019 @Lord Henry @MaligNos client-side local font1 = dxCreateFont("font/bebas.ttf", 13) local screenW, screenH = guiGetScreenSize() DeltaSCR_Painel = false function DeltaSCR_Edits() editDenuncia = guiCreateEdit(0.38, 0.57, 0.29, 0.04, "", true) editID = guiCreateEdit(0.34, 0.63, 0.33, 0.04, "", true) guiSetVisible (editDenuncia, false) guiSetVisible (editID, false) end addEventHandler("onClientResourceStart", resourceRoot, DeltaSCR_Edits) function DeltaSCR_DX () -- @Essa parte do DX não importa end function DeltaSCR_Abrir () if DeltaSCR_Painel == false then addEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) guiSetVisible (editDenuncia, true) guiSetVisible (editID, true) end end addEvent ("DeltaSCR:Abrir", true) addEventHandler ("DeltaSCR:Abrir", getRootElement(), DeltaSCR_Abrir) server-side local markers = { {1474.9, -1334.2, 11.8 -1}, {1446.0, -1376.6, 13.5 -1}, {2009.7, -1458.1, 13.3 -1} } addEventHandler ("onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler ("onMarkerHit", marker, MarkerHit) end end ) function MarkerHit () triggerClientEvent (source, "DeltaSCR:Abrir", getRootElement()) end Link to comment
[M]ister Posted March 10, 2019 Share Posted March 10, 2019 23 hours ago, MaligNos said: Olhe na wiki quais parâmetros são passados e o que significa cada um deles. Rt function MarkerHit (hitElement) if (getElementType(hitElement) == "player" then triggerClientEvent(hitElement, "DeltaSCR:Abrir", getRootElement()) end end Link to comment
#DeltaSCR Posted March 11, 2019 Author Share Posted March 11, 2019 OK, A parte de abrir o painel funcionou, agora estou com outro problema neste mesmo código: Quando eu aperto um botão, ele não executa a função que era pra ser realizada, a seguir o código... Client-Side: editDenuncia = guiCreateEdit(0.38, 0.57, 0.29, 0.04, "", true) editID = guiCreateEdit(0.34, 0.63, 0.33, 0.04, "", true) guiSetVisible (editDenuncia, false) guiSetVisible (editID, false) guiEditSetMaxLength (editDenuncia, 30) guiEditSetMaxLength (editID, 4) function obterDados () if DeltaSCR_Painel == true then data1 = guiGetText(editDenuncia) data2 = guiGetText(editID) end end DeltaSCR_Painel = false function DeltaSCR_DX () dxDrawRectangle(screenW * 0.5914, screenH * 0.6817, screenW * 0.0781, screenH * 0.0417, tocolor(0, 150, 0, 255), false) end function DeltaSCR_Abrir () if DeltaSCR_Painel == false then addEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) guiSetVisible (editDenuncia, true) guiSetVisible (editID, true) showCursor (true) end end addEvent ("DeltaSCR:Abrir", true) addEventHandler ("DeltaSCR:Abrir", getRootElement(), DeltaSCR_Abrir) function sendDenuncia (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if DeltaSCR_Painel == true then if state == "down" then if isCursorOnElement (screenW * 0.5914, screenH * 0.6817, screenW * 0.0781, screenH * 0.0417) then if guiGetText(editDenuncia) == "" or guiGetText(editID) == "" then outputChatBox ("#ff0000Erro: Verifique os campos preenchidos e tente novamente") return end outputChatBox ("#00ff00Sucesso: Você enviou sua denúncia, as autoridades estão resolvendo") end end end end addEventHandler ("onClientClick", getRootElement(), sendDenuncia) -- @Cursor Functions function cursorPosition (x, y, w, h) if (not isCursorShowing()) then return false end 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 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 Server-Side: local markers = { {1474.9, -1334.2, 11.8 -1}, {1446.0, -1376.6, 13.5 -1}, {2009.7, -1458.1, 13.3 -1} } addEventHandler ("onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler ("onMarkerHit", marker, MarkerHit) end end ) function MarkerHit (hitElement) if (getElementType(hitElement)) == "player" then triggerClientEvent(hitElement, "DeltaSCR:Abrir", getRootElement()) end end Acredito que a parte do Server-Side não esteja influenciando em nada... Link to comment
[M]ister Posted March 11, 2019 Share Posted March 11, 2019 Coloque DeltaSCR_Painel = true na função DeltaSCR_Abrir 1 Link to comment
#DeltaSCR Posted March 12, 2019 Author Share Posted March 12, 2019 10 hours ago, MaligNos said: Coloque DeltaSCR_Painel = true na função DeltaSCR_Abrir Como não pensei nisso antes Realmente era o que faltava; Quanto aos parâmetros de função da linha 34 acho que estão incorretos... Mas acho que consigo resolver aqui Link to comment
#DeltaSCR Posted March 12, 2019 Author Share Posted March 12, 2019 Ainda restou-me uma dúvida neste mesmo código: Pretendo obter o texto da editBox, Juntamente com Nome do Player que utilizou o painel, porém eu queria que fosse exibido um outputChatBox para uma ACL Especifica, porém verificação de ACL se não me engano é somente em server-side, como eu poderia fazer isso? Link to comment
Other Languages Moderators Lord Henry Posted March 12, 2019 Other Languages Moderators Share Posted March 12, 2019 triggerServerEvent triggerClientEvent Link to comment
#DeltaSCR Posted March 13, 2019 Author Share Posted March 13, 2019 Então, eu tentei fazer aqui usando o que o @Lord Henry me passou porém estou com os seguintes problemas: O outputChatBox não está sendo enviado para os policiais da ACL determinada; Quando eu aperto no botão de "enviar", aparece a seguinte mensagem no debugscript3: Spoiler WARNING: [SCR]PainelDenuncia\DeltaSCR_client:98 Bad argument @ 'triggerServerEvent' [Expected string at argument 1, got root] A Seguir os códigos (server-side e client-side): Client-Side local font1 = dxCreateFont("font/bebas.ttf", 13) local screenW, screenH = guiGetScreenSize() editDenuncia = guiCreateEdit(0.38, 0.57, 0.29, 0.04, "", true) editID = guiCreateEdit(0.34, 0.63, 0.33, 0.04, "", true) guiSetVisible (editDenuncia, false) guiSetVisible (editID, false) guiEditSetMaxLength (editDenuncia, 30) guiEditSetMaxLength (editID, 4) function obterDados () if DeltaSCR_Painel == true then data1 = guiGetText(editDenuncia) data2 = guiGetText(editID) end end DeltaSCR_Painel = false function DeltaSCR_DX () dxDrawRectangle(screenW * 0.5914, screenH * 0.6817, screenW * 0.0781, screenH * 0.0417, tocolor(0, 150, 0, 255), false) -- @Botão de Envio end -- addEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) function DeltaSCR_Abrir () if DeltaSCR_Painel == false then DeltaSCR_Painel = true addEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) guiSetVisible (editDenuncia, true) guiSetVisible (editID, true) showCursor (true) end end addEvent ("DeltaSCR:Abrir", true) addEventHandler ("DeltaSCR:Abrir", getRootElement(), DeltaSCR_Abrir) function sendDenuncia (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if DeltaSCR_Painel == true then if state == "down" then if isCursorOnElement (screenW * 0.5914, screenH * 0.6817, screenW * 0.0781, screenH * 0.0417) then if guiGetText(editDenuncia) == "" or guiGetText(editID) == "" then outputChatBox ("Erro: Verifique os campos preenchidos e tente novamente") return end outputChatBox ("Sucesso: Você enviou sua denúncia, as autoridades estão resolvendo") triggerServerEvent(root, "DeltaSCR:ACL", getRootElement()) DeltaSCR_Painel = false removeEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) guiSetVisible (editDenuncia, false) guiSetVisible (editID, false) showCursor (false) end end end end addEventHandler ("onClientClick", getRootElement(), sendDenuncia) -- @Cursor Functions function cursorPosition (x, y, w, h) if (not isCursorShowing()) then return false end 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 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 Server-Side local markers = { {1474.9, -1334.2, 11.8 -1}, {1446.0, -1376.6, 13.5 -1}, {2009.7, -1458.1, 13.3 -1} } addEventHandler ("onResourceStart", resourceRoot, function() for _,pos in ipairs(markers) do local marker = createMarker(pos[1], pos[2], pos[3], 'cylinder', 2.0, 255, 0, 0, 150) addEventHandler ("onMarkerHit", marker, MarkerHit) end end ) function MarkerHit (hitElement) if (getElementType(hitElement)) == "player" then triggerClientEvent(hitElement, "DeltaSCR:Abrir", getRootElement()) end end function verifyACL (thePlayer) local players = getElementsByType ("player") for _, thePlayer in ipairs (players) do local account = getAccountName (getPlayerAccount(thePlayer)) if isObjectInACLGroup ("user."..account, aclGetGroup ("ComandosPolicia")) then outputChatBox ("Denuncia de furto em: "..edit1.." ID: "..edit2.."") end end end addEvent ("DeltaSCR:ACL", true) addEventHandler ("DeltaSCR:ACL", getRootElement(), verifyACL) Conclusão: O que eu quero que aconteça é: O Player abre o Painel através de um Marker; Coloca sua denuncia na EditBox; Conclui a denuncia a partir do botão enviar e fecha o painel Essa denuncia deverá aparecer em forma de outputChatBox á todos os Players que estejam na ACL "ComandosPolicia" Link to comment
Other Languages Moderators Lord Henry Posted March 13, 2019 Other Languages Moderators Share Posted March 13, 2019 Seu triggerServerEvent está errado. Nem na wiki ele faz assim. Da onde vc tirou que o primeiro argumento é um elemento root? triggerServerEvent ( string event, element theElement, [arguments...] ) Além disso, você não passou nenhum parâmetro de player pelo triggerServerEvent. Isso significa que no server o parâmetro de função thePlayer não existe na função verifyACL. Troque seu trigger no client por isso: triggerServerEvent("DeltaSCR:ACL", localPlayer, guiGetText(editDenuncia), guiGetText(editID)) E lá na função server-side, troque a função inteira por essa: function verifyACL (edit1, edit2) -- Parâmetros passados no trigger. local players = getElementsByType ("player") for _, thePlayer in ipairs (players) do local account = getAccountName (getPlayerAccount(thePlayer)) if isObjectInACLGroup ("user."..account, aclGetGroup ("ComandosPolicia")) then -- Para cada jogador que está na ACL Group "ComandosPolicia", faça: outputChatBox ("Denúncia de furto em: "..edit1..". ID: "..edit2, thePlayer) end end end addEvent ("DeltaSCR:ACL", true) addEventHandler ("DeltaSCR:ACL", getRootElement(), verifyACL) 1 Link to comment
#DeltaSCR Posted March 14, 2019 Author Share Posted March 14, 2019 (edited) 11 hours ago, Lord Henry said: Seu triggerServerEvent está errado. Nem na wiki ele faz assim. Da onde vc tirou que o primeiro argumento é um elemento root? triggerServerEvent ( string event, element theElement, [arguments...] ) Além disso, você não passou nenhum parâmetro de player pelo triggerServerEvent. Isso significa que no server o parâmetro de função thePlayer não existe na função verifyACL. Troque seu trigger no client por isso: triggerServerEvent("DeltaSCR:ACL", localPlayer, guiGetText(editDenuncia), guiGetText(editID)) E lá na função server-side, troque a função inteira por essa: function verifyACL (edit1, edit2) -- Parâmetros passados no trigger. local players = getElementsByType ("player") for _, thePlayer in ipairs (players) do local account = getAccountName (getPlayerAccount(thePlayer)) if isObjectInACLGroup ("user."..account, aclGetGroup ("ComandosPolicia")) then -- Para cada jogador que está na ACL Group "ComandosPolicia", faça: outputChatBox ("Denúncia de furto em: "..edit1..". ID: "..edit2, thePlayer) end endendaddEvent ("DeltaSCR:ACL", true)addEventHandler ("DeltaSCR:ACL", getRootElement(), verifyACL) OK, vou testar, agora outra dúvida, como eu poderia fazer para o player fazer uma denúncia , e quando ele fizer a mesma, só poderá fazer outra após 10m? Edited March 14, 2019 by #DeltaSCR Link to comment
Other Languages Moderators Lord Henry Posted March 14, 2019 Other Languages Moderators Share Posted March 14, 2019 Criando uma table vazia e depois setando o timer com o jogador como índice. local timers = {} -- Dentro da função timers[thePlayer] = setTimer ()... 1 Link to comment
#DeltaSCR Posted March 14, 2019 Author Share Posted March 14, 2019 1 minute ago, Lord Henry said: Criando uma table vazia e depois setando o timer com o jogador como índice. local timers = {} -- Dentro da função timers[thePlayer] = setTimer ()... Pode me explicar um pouco melhor? Não entendi muito bem... @Lord HenryComo eu encaixaria esse setTimer no código? Link to comment
Jonas^ Posted March 14, 2019 Share Posted March 14, 2019 Como ele mesmo disse, coloque dentro da função, tente assim: local timers = {} function verifyACL (edit1, edit2) -- Parâmetros passados no trigger. local players = getElementsByType ("player") for _, thePlayer in ipairs (players) do local account = getAccountName (getPlayerAccount(thePlayer)) if isObjectInACLGroup ("user."..account, aclGetGroup ("ComandosPolicia")) then -- Para cada jogador que está na ACL Group "ComandosPolicia", faça: timers[thePlayer] = setTimer(function() outputChatBox ("Denúncia de furto em: "..edit1..". ID: "..edit2, thePlayer) end, 600000, 1) end end end addEvent ("DeltaSCR:ACL", true) addEventHandler ("DeltaSCR:ACL", getRootElement(), verifyACL) OBS: Não testei Link to comment
[M]ister Posted March 14, 2019 Share Posted March 14, 2019 Substitua a seguinte função no lado cliente: local tempo = false function DeltaSCR_Abrir () if tempo then return outputChatBox("*Aguarde para poder fazer outra denúncia!",255,0,0) end if DeltaSCR_Painel == false then DeltaSCR_Painel = true addEventHandler ("onClientRender", getRootElement(), DeltaSCR_DX) guiSetVisible (editDenuncia, true) guiSetVisible (editID, true) showCursor (true) tempo = true setTimer(function() tempo = false end,600000,1) end end addEvent ("DeltaSCR:Abrir", true) addEventHandler ("DeltaSCR:Abrir", getRootElement(), DeltaSCR_Abrir) 1 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