migsfiveM Posted November 3, 2023 Share Posted November 3, 2023 (edited) opa pessoal, boa tarde, recentemente baixei um sistema de drogas, com vendas para outros players, para escolher qual droga você quer vender para o player, vai ter um marker, que quando o player passa por cima, ele abre essa tabela: até ai tudo bem, porém, isso tudo e somente em um único marker, o que eu gostaria de fazer seria o seguinte:, por cada droga dessa em uma favela, no caso, colocar 1 marker com 1 droga apenas, e não 1 marker com todas as drogas. isso seria possível? vou estar colocando a linha de comando do script ai abaixo: ESSE E O CLIENT.LUA Spoiler eax = {} cor = {} function dxDrug () dxDrawRectangle(356, 248, 312, 347, tocolor(16, 16, 16, 255), false) dxDrawText("Compra de drogas", 410, 253, 608, 274, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false) cor[1] = tocolor(39, 39, 39, 255) if isCursorOnElement(362, 529, 148, 29) then cor[1] = tocolor(140, 135, 230, 136) end dxDrawRectangle(362, 529, 148, 29, cor[1], false) dxDrawText("Comprar", 362, 529, 362+148, 529+29, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false) cor[2] = tocolor(39, 39, 39, 255) if isCursorOnElement(513, 529, 148, 29) then cor[2] = tocolor(140, 135, 230, 136) end dxDrawRectangle(513, 529, 148, 29, cor[2], false) dxDrawText("Cancelar", 513, 529, 513+148, 529+29, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false) local data = scroll["Scroll"] for i = 1, visible do local values = valores[i + data] if values then eax[i] = {} local val1 = (335 - 31) + (i * 31) local val2 = (339 - 31 * 2) + (i * 31 * 2) eax[i][1] = val1 eax[i][2] = values[1] eax[i][3] = values[2] cor[3] = tocolor(25, 25, 25, 255) if selected == values[1] then cor[3] = tocolor(54, 46, 214, 136) end dxDrawRectangle(362, val1, 300, 29, cor[3], false) dxDrawText (values[1], 375, val2, 518, 360, tocolor (255, 255, 255, 255), 1.00, 'clear', "left", "center", false, true) dxDrawText ("$ "..values[2], 529, val2, 653, 360, tocolor (255, 255, 255, 255), 1.00, 'clear', "center", "center", false, true) end end end addEventHandler("onClientClick", root, function(button, state) if isEventHandlerAdded( "onClientRender", root, dxDrug ) then if button == "left" then if state == "down" then for index, v in ipairs(eax) do if v[1] then if isCursorOnElement(362, v[1], 300, 29) then selected = v[2] valueSe = v[3] end end end if isCursorOnElement(362, 529, 148, 29) then -- comprar if selected ~= false then triggerServerEvent("tryBuyDrug", localPlayer, selected, valueSe) else outputChatBox("Selecione um item para comprar!") end elseif isCursorOnElement(513, 529, 148, 29) then -- fechar scroll["Scroll"] = 0 valores = nil removeEventHandler("onClientRender", root, dxDrug) showCursor(false) selected = false valueSe = false end end end end end ) addEvent("openDrugSystem", true) addEventHandler("openDrugSystem", root, function (tableMessages) if not isEventHandlerAdded( "onClientRender", root, dxDrug ) then scroll = { } valores = { } for i = 1, #drogas do table.insert(valores, {drogas[i][1], drogas[i][2]}) end scroll["Scroll"] = 0 selected = false valueSe = false addEventHandler("onClientRender", root, dxDrug) showCursor(true) end end ) function scrollValues (button) if isEventHandlerAdded("onClientRender", root, dxDrug) then -- Variavel ou Função util de Painel Aberto. value = scroll["Scroll"] or 0 if ( button == "mouse_wheel_up" or button == "arrow_u") and value > 0 then value = value - 1 elseif (button == "mouse_wheel_down" or button == "arrow_d") and value < #valores - visible then value = value + 1 end scroll["Scroll"] = value end end bindKey ("mouse_wheel_up", "down", scrollValues) bindKey ("mouse_wheel_down", "down", scrollValues) bindKey ("arrow_u", "down", scrollValues) bindKey ("arrow_d", "down", scrollValues) function isEventHandlerAdded( sEventName, pElementAttachedTo, func ) if type( sEventName ) == 'string' and isElement( pElementAttachedTo ) and type( func ) == 'function' then local aAttachedFunctions = getEventHandlers( sEventName, pElementAttachedTo ) if type( aAttachedFunctions ) == 'table' and #aAttachedFunctions > 0 then for i, v in ipairs( aAttachedFunctions ) do if v == func then return true end end end end return false end function isCursorOnElement(x,y,w,h) if isCursorShowing() then 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 end addEvent("enableEffect", true) addEventHandler("enableEffect", getRootElement(), function (shake, timer) timerEffec = setTimer(function() setPedControlState(localPlayer, "walk", true) end, 100, 0) setWindVelocity(100, 100, 0) setCameraShakeLevel(shake) setTimer(function() resetWindVelocity() setCameraShakeLevel(1) if isTimer(timerEffec) then killTimer(timerEffec) end setPedControlState(localPlayer, "walk", false) triggerServerEvent("resetDrug",localPlayer) end, timer, 1) end ) ESSE E O CONFIG.LUA drogas = { --- Nome da droga || preço || efeito --- Caso for mudar a droga, os efeitos só vão até 5 {"Maconha", 12, "efeito1"}, {"Lança", 11, "efeito2"}, {"Cocaína", 10, "efeito3"}, {"Heroína", 10, "efeito4"}, {"Crack", 10, "efeito5"}, } maxDrug = 10 cmdSold = "vender" visible = 4 -- quantidade de linhas que a tabela irá ter no painel ESSE E O SERVER.LUA Spoiler markerDrogas = { {2071.709, -1551.279, 13.425}, } ACL = "Gang" markers = {} for index, v in ipairs(markerDrogas) do markers[index] = createMarker(v[1], v[2], v[3]-1, "cylinder", 1.5, 255,255,255,255) addEventHandler("onMarkerHit", markers[index], function (hitElement) if getElementType(hitElement) == "player" then if not getPedOccupiedVehicle(hitElement) then if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(hitElement)), aclGetGroup(ACL)) then triggerClientEvent(hitElement, "openDrugSystem", hitElement) else triggerClientEvent(hitElement, "N3xT.dxNotification", hitElement, "Você não é "..ACL, "error") end end end end ) end addCommandHandler("drogas", function(source) outputChatBox("Inventário de drogas",source) outputChatBox("----------------",source) for index, v in ipairs(drogas) do local qt = getElementData(source, v[1]) or 0 outputChatBox(v[1]..": "..qt,source) end outputChatBox("----------------",source) end ) addEvent("tryBuyDrug", true) addEventHandler("tryBuyDrug", root, function(element, value) if element and value then if getPlayerMoney(source) >= value then if getElementData(source, element) < maxDrug then --outputChatBox("[INFO]: "..element.." comprada com sucesso, pelo valor de: $ "..value, source) triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: "..element.." comprada com sucesso, pelo valor de: $ "..value, "success") setElementData(source, element, getElementData(source, element) + 1) takePlayerMoney(source, value) else triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: Capacidade máxima de "..element.." atingida!", "error") end else --outputChatBox("Você não tem dinheiro suficiente para comprar essa droga!", source) triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: Você não tem dinheiro suficiente para comprar essa droga!", "error") end end end ) function getEffectFromDrug(efeito) estilo = 0 shakeLevel = 0 if efeito == "efeito1" then estilo = 126 shakeLevel = 255 tempo = 10000 end if efeito == "efeito2" then estilo = 137 shakeLevel = 89 tempo = 15000 end if efeito == "efeito3" then estilo = 119 shakeLevel = 120 tempo = 17000 end if efeito == "efeito4" then estilo = 134 shakeLevel = 200 tempo = 20000 end if efeito == "efeito5" then estilo = 126 shakeLevel = 120 tempo = 25000 end return estilo, shakeLevel, tempo end addEvent("resetDrug", true) addEventHandler("resetDrug", getRootElement(), function () setPedWalkingStyle(source, 0) end ) addCommandHandler("usar", function(source, cmd, droga) if droga then if getElementData(source, droga) then if getElementData(source, droga) < 1 then triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem essa droga!", "error") return end for index, v in ipairs(drogas) do if v[1] == droga then efeito = v[3] end end outputChatBox("Você usou 01 "..droga,source) local style, shake, tempo = getEffectFromDrug(efeito) setElementData(source, droga, getElementData(source, droga) - 1) setPedWalkingStyle(source, style) triggerClientEvent(source, "enableEffect", source, shake, tempo) else triggerClientEvent(source, "N3xT.dxNotification", source, "Essa droga não existe! digite /drogas", "error") end end end ) function verifyPlayerID(id) for index, v in ipairs(getElementsByType("player")) do if getElementData(v, "ID") == tonumber(id) then return v end end return false end drogaReciever = {} addCommandHandler(cmdSold, function(source, cmd, drug, id, quanty, value) if tonumber(id) then if drug then if tonumber(value) then if tonumber(quanty) then local player = verifyPlayerID(id) if player then if getElementData(source, drug) >= 1 then triggerClientEvent(player, "N3xT.dxNotification", player, getPlayerName(source).. " quer te vender "..quanty.." "..drug.." por $ "..value, "info") triggerClientEvent(source, "N3xT.dxNotification", source, "Você ofereceu a "..getPlayerName(player).." "..quanty.." "..drug.." por: $ "..value, "info") drogaReciever[player] = {source, drug, quanty, value} else triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem essa droga, ou ela não existe!", "error") end else triggerClientEvent(source, "N3xT.dxNotification", source, "Jogador não existente!", "error") end else triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com a quantia da droga!", "error") end else triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com o valor da droga!", "error") end else triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com o nome da droga!", "error") end else triggerClientEvent(source, "N3xT.dxNotification", source, "O ID está incorreto!", "error") end end ) addCommandHandler("aceitar", function(source) tabela = drogaReciever[source] if tabela then if getPlayerMoney(source) >= tonumber(tabela[4]) then triggerClientEvent(source, "N3xT.dxNotification", source, "Você aceitou comprar "..tabela[3].." "..tabela[2].." por $ "..tabela[4].. " de "..getPlayerName(tabela[1]), "success") triggerClientEvent(tabela[1], "N3xT.dxNotification", tabela[1], getPlayerName(source).. " aceitou sua proposta! ", "success") takePlayerMoney(source, tonumber(tabela[4])) givePlayerMoney(tabela[1], tonumber(tabela[4])) setElementData(source, tabela[2], getElementData(source, tabela[2]) + 1) setElementData(tabela[1], tabela[2], getElementData(tabela[1], tabela[2]) - 1) drogaReciever[source] = false else drogaReciever[source] = false triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem dinheiro suficiente!", "error") end end end ) addCommandHandler("recusar", function(source) tabela = drogaReciever[source] if tabela then outputChatBox("Você recusou a proposta de "..getPlayerName(tabela[1]) ,source) outputChatBox(getPlayerName(source).. " recusou sua proposta ", tabela[1]) drogaReciever[source] = false end end ) function returnAcc ( cc ) if not isGuestAccount ( cc ) then if cc then local source = getAccountPlayer ( cc ) for index, v in ipairs(drogas) do local droga = getAccountData(cc, v[1]) or 0 setElementData(source, v[1], droga) end end end end function archiveAcc ( cc ) if cc then local source = getAccountPlayer ( cc ) for index, v in ipairs(drogas) do local droga = getElementData(source, v[1]) or 0 setAccountData(cc, v[1], droga) end end end addEventHandler ( "onResourceStart", getRootElement ( ), function ( res ) if res == getThisResource ( ) then for i, player in ipairs ( getElementsByType ( "player" ) ) do local acc = getPlayerAccount ( player ) if not isGuestAccount ( acc ) then returnAcc ( acc ) end end end end) addEventHandler("onPlayerLogin", root, function( _, acc ) returnAcc ( acc ) end ) addEventHandler ( "onResourceStop", getRootElement ( ), function (res) if res == getThisResource ( ) then for i, player in ipairs ( getElementsByType ( "player" ) ) do local acc = getPlayerAccount ( player ) if not isGuestAccount ( acc ) then archiveAcc ( acc ) end end end end ) addEventHandler ( "onPlayerQuit", getRootElement ( ), function ( quitType ) local acc = getPlayerAccount ( source ) if not isGuestAccount ( acc ) then if acc then archiveAcc ( acc ) end end end ) Edited November 4, 2023 by Lord Henry Scripts longos colocados dentro de spoilers. Link to comment
noonbr Posted November 4, 2023 Share Posted November 4, 2023 (edited) O propósito do fórum é auxiliar desenvolvedores Lua que estão começando, com suas dúvidas sobre seus próprios scripts. Edited November 4, 2023 by noonbr Link to comment
MeloSCR Posted November 18, 2023 Share Posted November 18, 2023 @migsfiveMPara fazer tal modificação, você deve editar o código como um todo, utilizando-se de tabelas especificando cada posição de marker e drogas para este, vou listar abaixo um exemplo de tabela, porém fique ciente que o script não irá funcionar apenas com esta. drugsMarkers = { { markerPosition = {-706.872, 963.666, 12.46-1}, markerDrugs = { {"Maconha", 12, "efeito1"}, {"Lança", 11, "efeito2"}, }, }, { markerPosition = {-708.351, 951.127, 13.313-1}, markerDrugs = { {"Cocaína", 10, "efeito3"}, {"Heroína", 10, "efeito4"}, {"Crack", 10, "efeito5"}, }, }, } 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