Jump to content

Blaack

Members
  • Posts

    194
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by Blaack

  1. Não há dois mods que contém esse evento? e quantas vezes esse dbQuery está passando? pode ser que exista dois valores la...
  2. addEvent("N3xT.onAlgemar", true) addEvent("N3xT.onViatura", true) addEvent("N3xT.onAgarrar", true) addEvent("N3xT.onMultar", true) addEvent("N3xT.ItensPM", true) addEvent("N3xT.takeWeaponPM", true) local comando = "policial" addCommandHandler(comando, function (thePlayer, _, id) local id = tonumber(id) if id then local player = getPlayerByID(id) if player and isElement(player) then local conta = getPlayerAccount(thePlayer) if conta and not isGuestAccount(conta) then local acc = getAccountName(conta) if isObjectInACLGroup("user."..conta, aclGetGroup("Policial")) then triggerClientEvent(thePlayer, "N3xT.onPainelPolicial", resourceRoot, player) end end end end end) getPlayerByID = function (id) local pReturn = false for i, v in ipairs(getElementsByType("player")) do local idp = getElementData(v, "ID") or false if idp then if idp == tonumber(id) then pReturn = v end end end return pReturn end addEventHandler("N3xT.onAlgemar", root, function() local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then if not getElementData(receiver, "Algemado") then setElementData(receiver, "Algemado", true) message(source, "O jogador foi algemado.", "success") message(receiver, "Você foi algemado!", "info") else setElementData(receiver, "Algemado", nil) setPedAnimation(receiver, false) message(source, "O jogador foi desalgemado.", "success") message(receiver, "Você foi desalgemado.", "info") end end end ) local carros = {} function salvacarro(vei, assento, vitima) carros[source] = vei end addEventHandler("onPlayerVehicleEnter", root, salvacarro) addEventHandler("N3xT.onViatura", root, function() local receiver = getElementData(source, "ReceiverPM") local vtr = carros[source] if (receiver) and (vtr) then local vrx, vry, vrz = getElementRotation(vtr) local px, py, pz = getElementPosition(vtr) if not getElementData(receiver, "NaViatura") then if not isPedInVehicle(receiver) then setElementData(receiver, "NaViatura", true) message(source, "O jogador foi colocado na viatura.", "success") message(receiver, "Você foi colocado na viatura!", "info") attachElements(receiver, vtr, 0.2, -1.5, 0, 0,0,90) setPedAnimation(receiver, 'ped','CAR_dead_LHS') setElementRotation(receiver, vrx, vry, vrz + 83) end else setElementData(receiver, "NaViatura", nil) message(source, "O jogador foi retirado da viatura.", "success") message(receiver, "Você foi retirado da viatura!", "info") detachElements(receiver, getElementAttachedTo(receiver)) setElementPosition(receiver, px + 2, py + 2, pz) setPedAnimation(receiver) end end end ) addEventHandler("N3xT.onAgarrar", root, function() local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then if not (getElementData(receiver, "Agarrado") == true) then setElementData(receiver, "Agarrado", true) message(source, "O jogador foi agarrado.", "success") message(receiver, "Você foi agarrado!", "info") attachElements(receiver, source, 0, 1, 0) else setElementData(receiver, "Agarrado", nil) message(source, "O jogador foi desagarrado.", "success") message(receiver, "Você foi desagarrado!", "info") detachElements(receiver, source) end end end ) addEventHandler("N3xT.onMultar", root, function(motivo, valor) local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then local money = getPlayerMoney(receiver) if (money >= tonumber(valor)) then message(source, "A multa foi aplicada com sucesso.", "success") message(receiver, "Você foi multado no valor de #00ff7fR$"..valor.." #ffffffpelo motivo: #a9a9a9"..motivo.."#ffffff.", "info") takePlayerMoney(receiver, tonumber(valor)) else message(source, "O jogador não possuí o valor da multa!", "error") end end end ) addEventHandler("N3xT.ItensPM", root, function(value, item, quantia) local receiver = getElementData(source, "ReceiverPM") if (receiver) then local next = exports.n3xt_inventario if (value == 1) then local itemTable = next:getAllItens(receiver) triggerClientEvent(source, "N3xT.refreshGridItemPM", resourceRoot, itemTable) elseif (value == 2) then next:takeItemS(source, receiver, item, tonumber(quantia)) triggerClientEvent(source, "N3xT.setWindowPM", resourceRoot, 1) end end end ) addEventHandler("N3xT.takeWeaponPM", root, function(arma) local receiver = getElementData(source, "ReceiverPM") if (receiver) then local id = getWeaponIDFromName(arma) takeWeapon(receiver, id) triggerClientEvent(source, "N3xT.setWindowPM", resourceRoot, 1) message(source, "A arma foi retirada com sucesso.", "success") message(receiver, "Foi retirado de você a arma #00ff7f"..arma.."#ffffff.", "info") end end ) function message(player, message, type) triggerClientEvent(player, "N3xT.dxNotification", resourceRoot, message, type) end Tinha esquecido de um parentese... @Im_PlayerGTA
  3. Bom dia, teste: server-side addEvent("N3xT.onAlgemar", true) addEvent("N3xT.onViatura", true) addEvent("N3xT.onAgarrar", true) addEvent("N3xT.onMultar", true) addEvent("N3xT.ItensPM", true) addEvent("N3xT.takeWeaponPM", true) local comando = "policial" addCommandHandler(comando, function (thePlayer, _, id) local id = tonumber(id) if id then local player = getPlayerByID(id) if player and isElement(player) then local conta = getPlayerAccount(thePlayer) if conta and not isGuestAccount(conta) then local acc = getAccountName(conta) if isObjectInACLGroup("user."..conta, aclGetGroup("Policial")) then triggerClientEvent(thePlayer, "N3xT.onPainelPolicial", resourceRoot, player) end end end end end getPlayerByID = function (id) local pReturn = false for i, v in ipairs(getElementsByType("player")) do local idp = getElementData(v, "ID") or false if idp then if idp == tonumber(id) then pReturn = v end end end return pReturn end addEventHandler("N3xT.onAlgemar", root, function() local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then if not getElementData(receiver, "Algemado") then setElementData(receiver, "Algemado", true) message(source, "O jogador foi algemado.", "success") message(receiver, "Você foi algemado!", "info") else setElementData(receiver, "Algemado", nil) setPedAnimation(receiver, false) message(source, "O jogador foi desalgemado.", "success") message(receiver, "Você foi desalgemado.", "info") end end end ) local carros = {} function salvacarro(vei, assento, vitima) carros[source] = vei end addEventHandler("onPlayerVehicleEnter", root, salvacarro) addEventHandler("N3xT.onViatura", root, function() local receiver = getElementData(source, "ReceiverPM") local vtr = carros[source] if (receiver) and (vtr) then local vrx, vry, vrz = getElementRotation(vtr) local px, py, pz = getElementPosition(vtr) if not getElementData(receiver, "NaViatura") then if not isPedInVehicle(receiver) then setElementData(receiver, "NaViatura", true) message(source, "O jogador foi colocado na viatura.", "success") message(receiver, "Você foi colocado na viatura!", "info") attachElements(receiver, vtr, 0.2, -1.5, 0, 0,0,90) setPedAnimation(receiver, 'ped','CAR_dead_LHS') setElementRotation(receiver, vrx, vry, vrz + 83) end else setElementData(receiver, "NaViatura", nil) message(source, "O jogador foi retirado da viatura.", "success") message(receiver, "Você foi retirado da viatura!", "info") detachElements(receiver, getElementAttachedTo(receiver)) setElementPosition(receiver, px + 2, py + 2, pz) setPedAnimation(receiver) end end end ) addEventHandler("N3xT.onAgarrar", root, function() local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then if not (getElementData(receiver, "Agarrado") == true) then setElementData(receiver, "Agarrado", true) message(source, "O jogador foi agarrado.", "success") message(receiver, "Você foi agarrado!", "info") attachElements(receiver, source, 0, 1, 0) else setElementData(receiver, "Agarrado", nil) message(source, "O jogador foi desagarrado.", "success") message(receiver, "Você foi desagarrado!", "info") detachElements(receiver, source) end end end ) addEventHandler("N3xT.onMultar", root, function(motivo, valor) local receiver = getElementData(source, "ReceiverPM") if (receiver) and not isPedInVehicle(receiver) then local money = getPlayerMoney(receiver) if (money >= tonumber(valor)) then message(source, "A multa foi aplicada com sucesso.", "success") message(receiver, "Você foi multado no valor de #00ff7fR$"..valor.." #ffffffpelo motivo: #a9a9a9"..motivo.."#ffffff.", "info") takePlayerMoney(receiver, tonumber(valor)) else message(source, "O jogador não possuí o valor da multa!", "error") end end end ) addEventHandler("N3xT.ItensPM", root, function(value, item, quantia) local receiver = getElementData(source, "ReceiverPM") if (receiver) then local next = exports.n3xt_inventario if (value == 1) then local itemTable = next:getAllItens(receiver) triggerClientEvent(source, "N3xT.refreshGridItemPM", resourceRoot, itemTable) elseif (value == 2) then next:takeItemS(source, receiver, item, tonumber(quantia)) triggerClientEvent(source, "N3xT.setWindowPM", resourceRoot, 1) end end end ) addEventHandler("N3xT.takeWeaponPM", root, function(arma) local receiver = getElementData(source, "ReceiverPM") if (receiver) then local id = getWeaponIDFromName(arma) takeWeapon(receiver, id) triggerClientEvent(source, "N3xT.setWindowPM", resourceRoot, 1) message(source, "A arma foi retirada com sucesso.", "success") message(receiver, "Foi retirado de você a arma #00ff7f"..arma.."#ffffff.", "info") end end ) function message(player, message, type) triggerClientEvent(player, "N3xT.dxNotification", resourceRoot, message, type) end client-side addEvent("N3xT.onPainelPolicial", true) addEvent("N3xT.refreshGridItemPM", true) addEvent("N3xT.setWindowPM", true) local screen = {guiGetScreenSize()} local x, y = (screen[1]/1366), (screen[2]/768) local tecla = "Tab" -- Tecla para fechar o painel. local edit = { guiCreateEdit(x*516, y*309, x*314, y*29, "Motivo", false), guiCreateEdit(x*516, y*381, x*314, y*29, "Valor", false), guiCreateGridList(x*548, y*229, x*253, y*214, false), guiCreateGridList(x*672, y*335, x*130, y*120, false), } guiGridListAddColumn(edit[3], "Item", 0.5) guiGridListAddColumn(edit[3], "Quantidade", 0.4) guiGridListAddColumn(edit[4], "Armas na Mão", 0.8) for i = 1, #edit do guiSetVisible(edit, false) end local visible local pm = function() dxDrawRectangle(x*502, y*161, x*343, y*370, tocolor(0, 0, 0, 150), false) dxDrawRectangle(x*502, y*161, x*5, y*370, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*840, y*161, x*5, y*370, tocolor(255, 140, 0, 255), false) dxDrawImage(x*650, y*167, x*57, y*52, "policial.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText("Pressione "..tecla.." para fechar", x*600, y*538, x*696, y*502, tocolor(255, 255, 255, 150), x*1.2, "arial", "left", "top", false, false, false, false, false) if (window == 1) then dxDrawRectangle(x*517, y*224, x*308, y*41, (isMouseInPosition(x*517, y*224, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*275, x*308, y*41, (isMouseInPosition(x*517, y*275, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*326, x*308, y*41, (isMouseInPosition(x*517, y*326, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*377, x*308, y*41, (isMouseInPosition(x*517, y*377, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*428, x*308, y*41, (isMouseInPosition(x*517, y*428, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*479, x*308, y*41, (isMouseInPosition(x*517, y*479, x*308, y*41) and tocolor(0, 0, 0, 200) or tocolor(0, 0, 0, 50)), false) dxDrawRectangle(x*517, y*479, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*517, y*428, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*517, y*377, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*517, y*326, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*517, y*275, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*517, y*224, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*224, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*275, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*326, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*377, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*428, x*5, y*41, tocolor(255, 140, 0, 255), false) dxDrawRectangle(x*820, y*479, x*5, y*41, tocolor(255, 140, 0, 255), false) local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then dxDrawText("Revistar", x*653, y*234, x*687, y*245, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) if getElementData(receiver, "Agarrado") then dxDrawText("Desagarrar", x*653, y*284, x*687, y*295, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) else dxDrawText("Agarrar", x*653, y*284, x*687, y*295, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) end if getElementData(receiver, "Algemado") then dxDrawText("Desalgemar", x*649, y*335, x*687, y*347, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) else dxDrawText("Algemar", x*649, y*335, x*687, y*347, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) end dxDrawText("Remover/Ver Itens", x*615, y*386, x*668, y*398, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) if getElementData(receiver, "NaViatura") then dxDrawText("Retirar da Viatura", x*618, y*437, x*659, y*449, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) else dxDrawText("Colocar na Viatura", x*618, y*437, x*659, y*449, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) end dxDrawText("Multar", x*658, y*488, x*696, y*502, tocolor(255, 255, 255, 200), x*1.20, "default", "left", "top", false, false, false, false, false) end elseif (window == 2) then local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then local nome = getPlayerName(receiver) local id = getElementData(receiver, "ID") or "N/A" local idade = getElementData(receiver, "AirNew_RG_DataDeNascimento") or "N/A" local rg = getElementData(receiver, "AirNew_PossuiRG") or "Nao" local cnh_a = getElementData(receiver, "PravaA") local cnh_b = getElementData(receiver, "PravaB") local cnh_c = getElementData(receiver, "PravaC") local cnh_d = getElementData(receiver, "PravaD") if (cnh_a) and (cnh_a == true) then cnh_a = "#00ff00Sim" else cnh_a = "#ff0000Não" end if (cnh_b) and (cnh_b == true) then cnh_b = "#00ff00Sim" else cnh_b = "#ff0000Não" end if (cnh_c) and (cnh_c == true) then cnh_c = "#00ff00Sim" else cnh_c = "#ff0000Não" end if (cnh_d) and (cnh_d == true) then cnh_d = "#00ff00Sim" else cnh_d = "#ff0000Não" end dxDrawText(" Dados Pessoais\n\nID: #00ff7f"..id.."#ffffff\n\nNome: "..nome.." #ffffff\n\nIdade: #00ff7f"..idade.."#ffffff\n\nRG: #00ff7f"..rg.."#ffffff\n\nMoto(A): "..cnh_a.."#ffffff\nCarro (B): "..cnh_b.."#ffffff\nCamião (C): "..cnh_c.."#ffffff\nBus (D): "..cnh_d, x*530, y*230, x*729, y*258, tocolor(255, 255, 255, 200), x*1.2, "default", "left", "top", false, false, false, true, false) dxDrawRectangle(x*694, y*466, x*86, y*29, (isMouseInPosition(x*694, y*466, x*86, y*29) and tocolor(125, 38, 205, 200) or tocolor(0, 0, 0, 150)), false) dxDrawText("Retirar", x*716, y*469, x*751, y*480, tocolor(255, 255, 255, 255), x*1.20, "default", "left", "top", false, false, false, false, false) end elseif (window == 3) then local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then dxDrawRectangle(x*636, y*472, x*89, y*29, (isMouseInPosition(x*636, y*472, x*89, y*29) and tocolor(125, 38, 205, 200) or tocolor(0, 0, 0, 150)), false) dxDrawText("Pegar", x*662, y*475, x*697, y*487, tocolor(255, 255, 255, 255), x*1.20, "default", "left", "top", false, false, false, false, false) end elseif (window == 4) then local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then dxDrawText("Preencha o motivo da Multa.", x*579, y*283, x*639, y*299, tocolor(255, 255, 255, 255), x*1.20, "default", "left", "top", false, false, false, false, false) dxDrawText("Preencha o valor da Multa.", x*590, y*358, x*650, y*374, tocolor(255, 255, 255, 255), x*1.20, "default", "left", "top", false, false, false, false, false) dxDrawRectangle(x*620, y*460, x*116, y*34, (isMouseInPosition(x*620, y*460, x*116, y*34) and tocolor(125, 38, 205, 200) or tocolor(0, 0, 0, 150)), false) dxDrawText("Multar", x*658, y*466, x*718, y*482, tocolor(255, 255, 255, 255), x*1.20, "default", "left", "top", false, false, false, false, false) end end end addEventHandler("N3xT.onPainelPolicial", root, function(click) if (visible ~= true) then addEventHandler("onClientRender", root, pm) showCursor(true) playSoundFrontEnd(20) setElementData(localPlayer, "ReceiverPM", click) visible = true window = 1 end end ) bindKey(tecla, "down", function() if (visible == true) then removeEventHandler("onClientRender", root, pm) showCursor(false) setElementData(localPlayer, "ReceiverPM", nil) playSoundFrontEnd(8) visible = false for i = 1, #edit do guiSetVisible(edit, false) end end end ) addEventHandler("onClientClick", root, function(button, state) if (button == "left") and (state == "down") then if (visible == true) then if (window == 1) then if isMouseInPosition(x*517, y*326, x*308, y*41) then -- Algemar. setTimer(function() triggerServerEvent("N3xT.onAlgemar", localPlayer) playSoundFrontEnd(1) end, 10, 1) elseif isMouseInPosition(x*517, y*428, x*308, y*41) then -- Colocar na viatura. setTimer(function() triggerServerEvent("N3xT.onViatura", localPlayer) playSoundFrontEnd(1) end, 10, 1) elseif isMouseInPosition(x*517, y*275, x*308, y*41) then -- Agarrar. setTimer(function() triggerServerEvent("N3xT.onAgarrar", localPlayer) playSoundFrontEnd(1) end, 10, 1) elseif isMouseInPosition(x*517, y*224, x*308, y*41) then -- Revistar. setTimer(function() window = 2 updateArmas() guiSetVisible(edit[4], true) playSoundFrontEnd(1) end, 10, 1) elseif isMouseInPosition(x*517, y*377, x*308, y*41) then -- Remover itens. setTimer(function() window = 3 triggerServerEvent("N3xT.ItensPM", localPlayer, 1) guiSetVisible(edit[3], true) playSoundFrontEnd(1) end, 10, 1) elseif isMouseInPosition(x*517, y*479, x*308, y*41) then -- Multar. setTimer(function() window = 4 guiSetVisible(edit[1], true) guiSetVisible(edit[2], true) playSoundFrontEnd(1) end, 10, 1) end end end end end ) function updateArmas() local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then guiGridListClear(edit[4]) for _, v in ipairs(getPedWeapons(receiver)) do guiGridListAddRow(edit[4], getWeaponNameFromID(v)) end end end addEventHandler("onClientClick", root, function(button, state) if (button == "left") and (state == "down") then if (visible == true) then if (window == 2) then if isMouseInPosition(x*694, y*466, x*86, y*29) then if (guiGridListGetSelectedItem(edit[4]) ~= -1) then local arma = guiGridListGetItemText(edit[4], guiGridListGetSelectedItem(edit[4]), 1) triggerServerEvent("N3xT.takeWeaponPM", localPlayer, arma) else triggerEvent("N3xT.dxNotification", root, "Selecione uma arma!", "error") end end elseif (window == 3) then if isMouseInPosition(x*636, y*472, x*89, y*29) then if (guiGridListGetSelectedItem(edit[3]) ~= -1) then local item = guiGridListGetItemText(edit[3], guiGridListGetSelectedItem(edit[3]), 1) local quantia = guiGridListGetItemText(edit[3], guiGridListGetSelectedItem(edit[3]), 2) triggerServerEvent("N3xT.ItensPM", localPlayer, 2, item, quantia) else triggerEvent("N3xT.dxNotification", root, "Selecione um item!", "error") end end elseif (window == 4) then if isMouseInPosition(x*620, y*460, x*116, y*34) then local motivo = guiGetText(edit[1]) local valor = guiGetText(edit[2]) if (motivo ~= "Motivo") and (motivo ~= "") then if tonumber(valor) and (tonumber(valor) >= 1) then triggerServerEvent("N3xT.onMultar", localPlayer, motivo, valor) else triggerEvent("N3xT.dxNotification", root, "Coloque um valor válido!", "error") end else triggerEvent("N3xT.dxNotification", root, "Coloque um motivo válido!", "error") end end end end end end ) addEventHandler("N3xT.refreshGridItemPM", root, function(itable) if (type(itable) == "table") then guiGridListClear(edit[3]) for _, v in ipairs(itable) do guiGridListAddRow(edit[3], v[1], v[2]) end end end ) addEventHandler("N3xT.setWindowPM", root, function(value) window = value for i = 1, #edit do guiSetVisible(edit, false) end end ) addEventHandler("onClientRender", root, function() local receiver = getElementData(localPlayer, "ReceiverPM") if (receiver) then if (visible == true) then local x, y, z = getElementPosition(localPlayer) local px, py, pz = getElementPosition(receiver) if (getDistanceBetweenPoints3D(x, y, z, px, py, pz) > 3) then removeEventHandler("onClientRender", root, pm) showCursor(false) setElementData(localPlayer, "ReceiverPM", nil) playSoundFrontEnd(8) visible = false for i = 1, #edit do guiSetVisible(edit, false) end end end end end ) addEventHandler("onClientRender", root, function() for k, v in ipairs(getElementsByType("player")) do if getElementData(v, "Algemado") then local k, anim = getPedAnimation(v) if (anim ~= "gift_give") then setPedAnimation(v, "kissing", "gift_give", 500, true, false, false, true) end setPedAnimationProgress(v, 'gift_give', 0.10) end end end ) addEventHandler("onClientKey", root, function(button) if (button) then if (getElementData(localPlayer, "Algemado") == true) or (getElementData(localPlayer, "NaViatura") == true) then cancelEvent() end end end ) function getPedWeapons(ped) local playerWeapons = {} if ped and isElement(ped) and getElementType(ped) == "ped" or getElementType(ped) == "player" then for i=2,9 do local wep = getPedWeapon(ped,i) if wep and wep ~= 0 then table.insert(playerWeapons,wep) end end else return false end return playerWeapons end function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) ) end @Im_PlayerGTA
  4. Olá! Qual o lado client do seu mod? por aqui ja consigo fazer, mas ai retornaria erro do click... me manda o lado client que faço
  5. Pensando desta maneira, e se o staff fosse removido do grupo? ele tem que transferir o bindKey pro lado server e quando acionado la. Mandar por trigger a quantia
  6. Me mande a funcao que aciona o painel (para abrir o dx)
  7. Caso não consiga, me chame por aqui ou por pm que te ajudo
  8. Rapaz, boa tarde. A função de verificar acl, só funciona em resource server-side... então não há como fazer essa verificação diretamente no client, a não ser que um staff seu esteja setado em algum tipo de data (elementData), ou que você envia a quantia via trigger quando for abrir o painel.
  9. local skins = { ["Masculino"] = 217, ["Feminino"] = 11, } function info(thePlayer) local conta = getPlayerAccount(thePlayer) if conta and not isGuestAccount(conta) then local acc = getAccountName(conta) local genero = getAccountData(conta, "RJcartorio.genero") if genero then local skin = skins[genero] if skin then if isObjectInACLGroup ( "user." ..acc, aclGetGroup ("Staff")) then setElementModel (thePlayer, skin) end end end end end addCommandHandler("staffon", info)
  10. ----------------------------------------------------------------------------------------------------------- SpawnVeiculos = { [1] = {475,2772.91821,-1875.39771,9.76530}, [2] = {579,2777.66089, -1875.53064, 9.79008}, [3] = {602,2782.63550, -1876.05444, 9.81087}, [4] = {475,2787.60474, -1875.87512, 9.83121}, } ----------------------------------------------------------------------------------------------------------- function NovoID() local result = dbPoll(dbQuery(db, "SELECT ID FROM Veiculos ORDER BY ID ASC"), -1) newID = false for i, id in pairs (result) do if id["ID"] ~= i then newID = i break end end if newID then return newID else return #result + 1 end end ----------------------------------------------------------------------------------------------------------- addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), function() db = dbConnect("sqlite", "database.db") dbExec(db, "CREATE TABLE IF NOT EXISTS Veiculos (loggin,ID,Model)") end ) ----------------------------------------------------------------------------------------------------------- function onResourceStart(source) if #SpawnVeiculos > 0 then for i,v in ipairs(SpawnVeiculos) do SpawnVeiculos = createVehicle(v[1], v[2], v[3], v[4]) setElementFrozen(SpawnVeiculos, true) end else return end end addEventHandler ( "onResourceStart", resourceRoot, onResourceStart ) ----------------------------------------------------------------------------------------------------------- function enterVehicle (theVehicle) outputChatBox ( "/comprarveiculo Para Comprar o Veiculo", source ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), enterVehicle ) ----------------------------------------------------------------------------------------------------------- function comprarveiculo(theVehicle) local data = dbPoll(dbQuery(db, "SELECT * FROM Veiculos WHERE loggin = ?", getAccountID(getPlayerAccount(client))), -1) local theVehicle = getPedOccupiedVehicle (source) local Model = getElementModel(theVehicle) local possui = false for i, data in ipairs (data) do if data["Model"] == Model then possui = true break end end if not possui then if getPlayerMoney(source) >= 1200 then takePlayerMoney(source,1200 ) setElementFrozen(theVehicle, false) local NewID = NovoID() dbExec(db, "INSERT INTO Veiculos VALUES(?,?,?)", getAccountName(getPlayerAccount(client)),tonumber(NewID), tonumber(Model)) else outputChatBox ( "você não tem dinheiro para comprar-lo", source,255,255,255,true) end end end addCommandHandler("comprarveiculo", comprarveiculo )
  11. Rapaz como voce ta puxando isso?
  12. Rapaz, bom dia... Qual o arquivo desta tua "gridList". Isso é função útil não? Mas enfim, irei seguir a lógica. -- Lado client function Reload_Samu () ListaSamu:Clear(true) for i, v in ipairs(getElementsByType("player")) do local data = getElementData(v, "Samu:Chamado") if data then local Nome = getPlayerName(v) local ID = (getElementData(v,"ID") or "N/A") ListaSamu:AddItem(1, Nome) ListaSamu:AddItem(2, ""..ID) end end end addEvent("AtualizarSAMU", true) addEventHandler("AtualizarSAMU", getRootElement(), Reload_Samu) -- Lado server addCommandHandler("samu", function (thePlayer) local data = getElementData(thePlayer, "Samu:Chamado") if not data then setElementData(thePlayer, "Samu:Chamado", true) outputChatBox("#00FFFF[INFO] #FFFFFFVocê solicitou uma ambulancia do samu", thePlayer, 255, 255, 255, true) triggerClientEvent(thePlayer, "AtualizarSAMU", root) end end)
  13. Olá! Você pode armazenar pela conta dele em uma tabela (sqlLite), Utilize o evento onPlayerQuit, pegue a conta e o nome da conta, armazene em um banco de dados. Quando o player logar (acione pelo evento onPlayerLogin), pegue o nome da conta (segundo parametro da funcao) verifique no banco de dados e carregue os dados no elemento player.
  14. Possivelmente, mySQL... Insere no mySQL, e checa no servidor a tabela...
  15. Voce testou essa solução que mandei?
  16. @Keven CamposPode utilizar essa base: -- Client addEvent("AbrirPainel", true) addEventHandler("AbrirPainel", getRootElement(), function () -- [[Faça seu código de abrir o dx aqui]] end) -- Server addCommandHandler("dx", function (thePlayer) local conta = getPlayerAccount(thePlayer) if conta and not isGuestAccount(conta) then local acc = getAccountName(conta) if isObjectInACLGroup("user."..acc, aclGetGroup("DX"--[[Aqui o nome da acl!]])) then triggerClientEvent(thePlayer, "AbrirPainel", thePlayer) -- Aqui acionamos o evento! end end end)
  17. local Spawn1 = createMarker(-1013.2669067383,-1061.5272216797,129.26875305176 -1,"cylinder", 1.5, 0,255,0,70) local Destroy1 = createMarker(-1043.8754882813,-1061.3928222656,129.26875305176 -1,"cylinder", 1.9, 255,0,0,80) local veh = {} function spawnvtr ( hitElement ) if hitElement and isElement(hitElement) and getElementType(hitElement) == "player" and not isPedInVehicle(hitElement) then if veh[hitElement] then if isElement(veh[hitElement]) then destroyElement (veh[hitElement]) end veh[hitElement] = nil end local conta = getPlayerAccount(hitElement) if conta and not isGuestAccount(conta) then local accName = getAccountName ( conta ) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "PMESP") ) and getElementModel (hitElement) == 144 then veh[hitElement] = createVehicle(540, -1038.7395,-1059.2214,129.6529, -0.0212, -0.0015, 359.5408) warpPedIntoVehicle ( hitElement, veh[hitElement] ) else outputChatBox("#FFFFFF| #E10000PMESP #FFFFFF| Somente #E10000PMESP #FFFFFFPodem Pegar Este Veiculo.",hitElement,255,255,255, true) end end end end addEventHandler("onMarkerHit", Spawn1, spawnvtr) function destroyvtr ( hitElement ) if hitElement and isElement(hitElement) and getElementType(hitElement) == "player" then if veh[hitElement] then if isElement(veh[hitElement]) then destroyElement (veh[hitElement]) end veh[hitElement] = nil end end end addEventHandler("onMarkerHit", Destroy1, destroyvtr) Você estava verificando a skin do elemento (thePlayer) elemento qual, não estava sendo definido em nenhum lugar na função, fiz a alteração e algumas edições para previnir futuros erros...
  18. local var = { markers = {}, } local Usando = {} local itemobj = {} addEventHandler("onResourceStart", resourceRoot, function (res) if res == getThisResource() then for i, v in pairs(Config.MarkerBebedouro) do var.markers[i] = createMarker(v[1], v[2], v[3]- 0.9, "cylinder", 2.5, 0, 0, 0, 255) addCommandHandler("teste", function (thePlayer) if isElementWithinMarker(thePlayer, var.markers[i]) then setElementFrozen(thePlayer, true) toggleAllControls (thePlayer, false) setElementFrozen(thePlayer, true) setPedAnimation(thePlayer, "bd_fire", "wash_up", 1, true, true, true, true) MX_TakeItem(thePlayer, item, 1,slot) Usando[thePlayer] = true itemobj[thePlayer] = createObject(1950, x, y, z) setElementDimension(itemobj[thePlayer], dim) setElementInterior(itemobj[thePlayer], int) exports.bone_attach:attachElementToBone(itemobj[thePlayer], thePlayer, 11, -0.10, 0.06, 0.14, -2, 90,-15) setTimer(function() destroyElement(itemobj[thePlayer]) itemobj[thePlayer] = nil Usando[thePlayer] = nil setPedAnimation(thePlayer, "bd_fire", "wash_up", 1, false, false, false, false) setElementFrozen(thePlayer, false) MX_GiveItem(thePlayer, "agua", 1, slot) setElementFrozen(thePlayer, false) toggleAllControls (thePlayer, true ) end, 5000*quantidade, 1) end) end end end end) Brother, quando for mandar algum código. Pode mandar completo, por favor?
  19. Bom vamos lá! @BlackinSCR Gostei do nick haha' function adminchat4 ( thePlayer, _, ... ) local message = table.concat ( { ... }, " " ) if ( isPlayerOnGroup ( thePlayer ) ) then for _, player in ipairs ( getElementsByType ( "player" ) ) do if ( isPlayerOnGroup ( player ) ) then if getElementData (thePlayer, "ChatGlobal:Delay1", true) then outputChatBox ( MensagemFalandoRapidoDemaisGlobal, thePlayer, 255, 255, 255, true ) return end local conta = getAccountName(getPlayerAccount(player)) -- Aqui voce deve verificar para quem irá aparcer a mensagem (player definido no for) if isObjectInACLGroup ("user."..conta, aclGetGroup ( "Staff" ) ) then outputChatBox("* #bfbfbfDeep Web - #ffffff"..getPlayerName(thePlayer).. " ("..getPlayerID(thePlayer)..") #bfbfbf- "..message, player, 255, 255, 255, true) elseif isObjectInACLGroup ("user."..conta, aclGetGroup ( "Everyone" ) ) then outputChatBox("* #bfbfbfDeep Web - "..message, player, 255, 255, 255, true) end end end end setElementData ( thePlayer, "ChatGlobal:Delay2",true ) setTimer ( setElementData, 100, 1, thePlayer, "ChatGlobal:Delay2", false ) end addCommandHandler ( ComandoDoChatGlobal4, adminchat4 )
  20. local font1 = dxCreateFont("Files/fonte.ttf", 10) local font_10 = dxCreateFont("Files/fonte.ttf", 10) local font_11 = dxCreateFont("Files/fonte.ttf", 9) dxGrid = { items = {} }; local cursorOn; local NATIVE_RESOLUTION = { 1366, 768 } -- put your screen resolution here to fit the gridlists to all resolutions (ex: { 1366, 768 } ) if ( table.maxn ( NATIVE_RESOLUTION ) == 2 ) then FIT_MODE = true RES = { guiGetScreenSize() }; X,Y = RES[1] / NATIVE_RESOLUTION[1], RES[2] / NATIVE_RESOLUTION[2]; SCALE = ( 1 / NATIVE_RESOLUTION[1] ) * RES[1]; end --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Core - functions function dxGrid:Create ( x, y, width, height, postGUI ) -- table dxGrid:Create ( int x, int y, int width, int height[, bool postGUI ] ) if __checkParams ( "Create", "nnnn", x, y, width, height ) then local data = { x = FIT_MODE and ( x * X ) or x; -- X position y = FIT_MODE and ( y * Y ) or y; -- Y position w = FIT_MODE and ( width * X ) or width; -- Width h = FIT_MODE and ( height * Y ) or height; -- Height pg = postGUI or false; -- PostGUI i = {}; -- Items mi = __calcMaxItems ( FIT_MODE and ( height * Y ) or height ); -- Max items s = 1; -- Scroll Level r = -1; -- Row count se = -1; -- Selected item mo = nil; -- Mouse-on item vis = true -- Visible }; setmetatable ( data, { __index = dxGrid } ); table.insert ( dxGrid.items, data ); return data; end end function dxGrid:Destroy () -- bool dxGrid:Destroy () for k, v in pairs ( dxGrid.items ) do if v == self then dxGrid.items[k] = nil; return true; end end return false; end function dxGrid:SetItemText (itemID, column, new_text ) if __checkParams ( "SetItemText", "nns", itemID, column, new_text ) then if self.i[column] and self.i[column][itemID] then self.i[column][itemID].text = new_text return self.i[column][itemID].text == new_text end end return false end function dxGrid:SetVisible ( visible ) -- bool Gridlist:SetVisible ( bool state ) if __checkParams ( "SetVisible", "b", visible ) then self.vis = visible return true else return false end end function dxGrid:IsVisible ( ) -- bool Gridlist:IsVisible() return self.vis end function dxGrid:AddColumn ( title, width ) -- int Gridlist:AddColumn ( string title, int width ) if __checkParams ( "AddColumn", "sn", title, width ) then local data = { info = { title = title, width = FIT_MODE and ( width * X ) or width } }; table.insert ( self.i, data ); return #self.i; end end function dxGrid:RemoveColumn ( columnIndex ) -- bool Gridlist:RemoveColumn ( int columnIndex ) if __checkParams ( "RemoveColumn", "n", columnIndex ) then self.i[columnIndex] = nil; -- Recalculate the highest item count local highest = -1; for _, v in ipairs ( self.i ) do if #v > highest then highest = ( #v - 1 ); end end self.r = highest; -- Recalculate the scroll level (if necessary) if ( ( ( self.s + self.mi ) - 2 ) == self.r ) then self.s = ( self.r - self.mi ) + 1; end return true end return false end function dxGrid:GetColumnCount () -- int Gridlist:GetColumnCount() return #self.i end function dxGrid:AddItem ( columnIndex, text, data, r, g, b ) -- int Gridlist:AddItem ( int columnIndex, string title[, mixed data, int r, int g, int b ] ) if __checkParams ( "AddItem", "ns", columnIndex, text ) then if self.i[columnIndex] then local tColor = __checkRGB ( r, g, b ) and { r, g, b } or { 255, 255, 255 }; table.insert ( self.i[columnIndex], { id = #self.i[columnIndex] + 1, text = tostring( text ), data = data, color = tColor } ); if #self.i[columnIndex] > self.r then self.r = #self.i[columnIndex]; end return #self.i[columnIndex]; end return false; end end function dxGrid:RemoveItem ( column, itemID ) -- bool Gridlist:RemoveItem ( int columnIndex, int itemIndex ) if __checkParams ( "RemoveItem", "nn", column, itemID ) then if self.i[column] and self.i[column][itemID] then -- Recalculate the highest item count if self.r == #self.i[column] then local highest = -1; for _, v in ipairs ( self.i ) do if #v > highest then highest = ( #v - 1 ); end end self.r = highest; end -- Recalculate the scroll level (if necessary) if ( ( ( self.s + self.mi ) - 2 ) == self.r ) then self.s = ( self.r - self.mi ) + 1; end -- Reset the selected item if necessary² if itemID == self.se then local newItem = self.se - 1 if newItem <= self.r then self.se = math.max ( 0, newItem ); else self.se = -1 end end table.remove ( self.i[column], itemID ); return true; end return false end end function dxGrid:GetItemCount ( columnID ) -- int Gridlist:GetItemCount ( int columnIndex ) if __checkParams ( "GetItemCount", "n", columnID ) then if self.i[columnID] then return #self.i[columnID] end return false end end function dxGrid:Clear () -- bool Gridlist:Clear() for k, v in ipairs ( self.i ) do self.i[k] = { info = v.info } end self.r = -1 self.se = nil -- Recalculate the scroll level self.s = 1; return true end function dxGrid:GetSelectedItem ( ) -- int Gridlist:GetSelectedItem () return self.se; end function dxGrid:SetSelectedItem ( itemID ) -- bool Gridlist:SetSelectedItem ( int itemIndex ) if __checkParams ( "SetSelectedItem", "n", itemID ) then if itemID <= self.r then self.se = itemID; return self.se == itemID; end return false; end end function dxGrid:GetItemDetails ( column, itemID ) -- string, mixed Gridlist:GetItemDetails ( int columnIndex, int itemIndex ) if __checkParams ( "GetItemDetails", "nn", columnID, itemID ) then if self.i[column] then if self.i[column][itemID] then return self.i[column][itemID].text, self.i[column][itemID].data end end return false end end --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Core - render/move addEventHandler ( "onClientRender", root, function ( ) -- Is there any gridlist to render? if #dxGrid.items > 0 then -- Loop through all grid lists for index, data in ipairs ( dxGrid.items ) do -- Is the gridlist visible? if data.vis then -- Draw the 'gridlist' itself dxDrawRectangle (data.x, data.y, data.w, data.h, tocolor ( 0, 0, 0, 100), data.pg ); -- Draw the column bar dxDrawRectangle ( data.x, data.y, data.w, 30 % data.h, tocolor (255, 0 , 0 , 255), data.pg ); -- Set cursorOn variable to the current gridlist, if it's selected cursorOn = nil if __isMouseInPosition ( data.x, data.y, data.w, data.h ) then cursorOn = index; end -- Check if there's any selected item local seeFrom = data.s; local seeTo = ( data.s + data.mi ) - 1; if data.se and data.se <= data.r and data.se >= seeFrom and data.se <= seeTo then local index = data.se - ( data.s - 1 ); local y2 = data.y + ( ( index - 1 ) * 25 ); -- Draw a rectangle to make it looks like selected dxDrawRectangle ( data.x, ( 30 % data.h ) + y2, data.w, 25, tocolor ( 0, 0, 0, 110 ), data.pg ); -- dxDrawRectangle ( data.x, ( 30 % data.h ) + y2, data.w, 25, tocolor (0, 0, 0, ), data.pg ); end -- Is there any column? if #data.i > 0 then local cWidth = 0 -- Loop through all columns for cIndex, cData in ipairs ( data.i ) do -- we'll go beyond the gridlist width with this column ? if ( ( cWidth + cData.info.width ) <= data.w ) then local x = data.x + cWidth; -- Draw the column title dxDrawText ( cData.info.title, x + 10, data.y, cData.info.width + x, ( 30 % data.h ) + data.y, tocolor ( 255, 255, 255 , 200 ), FIT_MODE and ( 1 * SCALE ) or 1, font_10, "center", "center", true, true, data.pg, false, true ); -- Reset the selected item cData.info.selected = -1; -- Is there any item ? if #cData > 0 then local seeFrom = data.s; local seeTo = ( data.s + data.mi ) - 1; -- Loop the items for iIndex = seeFrom, seeTo do -- There's a row with this index in the current column? if cData[iIndex] then local index = iIndex - ( data.s - 1 ); local y = data.y + ( index * 25 ); local y2 = data.y + ( ( index - 1 ) * 25 ); -- Check if cursor is on item position if __isMouseInPosition ( data.x, ( 30 % data.h ) + y2, data.w, 25 ) then -- Define the mouse-on variable data.mo = iIndex; end -- Draw the item text dxDrawText ( cData[iIndex]["text"], x + 10, y, cData.info.width + x, ( 30 % data.h ) + y + 5, tocolor ( 255, 255, 255, 255), FIT_MODE and ( 1 * SCALE ) or 1, font_11, "left", "center", true, true, data.pg, false, true ); end end end -- Increase cWidth variable (to draw the columns correctly) cWidth = cWidth + cData.info.width; end end end end end end end , true, "low-5") -- addEventHandler ( "onClientKey", root, function ( button, press ) -- Is cursor showing? if isCursorShowing () then -- Is there any gridlist? if #dxGrid.items > 0 then -- Is there any selected gridlist? if cursorOn then -- We pressed the scroll? if press and #button > 6 then -- Does the gridlist requires scroll? if dxGrid.items[cursorOn].r > dxGrid.items[cursorOn].mi then -- Define some variables local index = cursorOn; local currentValue = dxGrid.items[index].s; local newValue = math.max(1, button == "mouse_wheel_down" and currentValue + 2 or button == "arrow_d" and currentValue + 2 or button == "mouse_wheel_up" and currentValue - 1 or button == "arrow_u" and currentValue - 1) -- Check if we have spent the row's limit with the new value if ( ( newValue + dxGrid.items[index].mi ) > dxGrid.items[index].r ) then newValue = ( dxGrid.items[index].r - dxGrid.items[index].mi ) + 1; end -- Set the new scroll level dxGrid.items[index].s = newValue; end elseif press and button == "mouse1" and dxGrid.items[cursorOn].mo then dxGrid.items[cursorOn].se = dxGrid.items[cursorOn].mo; end end end end end ) --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Useful function __calcMaxItems ( height ) for i = 0, 9999 do if ( ( ( i + 1 ) * 25 ) >= math.floor ( height ) ) then return ( ( ( i + 1 ) * 25 ) > math.floor ( height ) and ( i - 1 ) or i ); end end return false; end function __checkParams ( methodName, pattern, ... ) local cTable = { ["string"] = "s"; ["number"] = "n"; ["boolean"] = "b"; ["s"] = "string"; ["n"] = "number"; ["b"] = "boolean" }; if #pattern > table.maxn ( { ... } ) then local index = table.maxn ( { ... } ) == 0 and 1 or table.maxn ( { ... } ) + 1 --return false, error ( "Bad Argument @ '"..methodName.."' [Expected "..cTable[ pattern:sub ( index, index ) ].." at argument "..index..", got none]" ) end for k, v in pairs ( { ... } ) do if cTable[ type ( v ) ] ~= pattern:sub ( k, k ) then ---return false, error ( "Bad Argument @ '"..methodName.."' [Expected "..cTable[ pattern:sub ( k, k ) ].." at argument "..k..", got "..( type ( v ) or "none" ).."]" ) end end return true; end function __checkRGB ( r, g, b ) -- Check if all parameters were passed if ( not r ) or ( not g ) or ( not b ) then return false; end for _, v in ipairs ( { r, g, b } ) do if ( type ( v ) ~= "number" ) or ( v < 0 ) or ( v > 255 ) then return false; end end return true; end function __isMouseInPosition ( x, y, w, h ) if not isCursorShowing() then return false end local res = { guiGetScreenSize() }; local cpos = { getCursorPosition() }; local fpos = { res[1] * cpos[1], res[2] * cpos[2] }; return ( fpos[1] >= x and fpos[1] <= x + w ) and ( fpos[2] >= y and fpos[2] <= y + h ) end ---------------------------------------------------------------------------------------------------------------------- dxGrid1 = { items = {} }; local cursorOn; local NATIVE_RESOLUTION = { nil } -- put your screen resolution here to fit the gridlists to all resolutions (ex: { 1366, 768 } ) if ( table.maxn ( NATIVE_RESOLUTION ) == 2 ) then FIT_MODE = true RES = { guiGetScreenSize() }; X,Y = RES[1] / NATIVE_RESOLUTION[1], RES[2] / NATIVE_RESOLUTION[2]; SCALE = ( 1 / NATIVE_RESOLUTION[1] ) * RES[1]; end --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Core - functions function dxGrid1:Create ( x, y, width, height, postGUI ) -- table dxGrid:Create ( int x, int y, int width, int height[, bool postGUI ] ) if __checkParams ( "Create", "nnnn", x, y, width, height ) then local data = { x = FIT_MODE and ( x * X ) or x; -- X position y = FIT_MODE and ( y * Y ) or y; -- Y position w = FIT_MODE and ( width * X ) or width; -- Width h = FIT_MODE and ( height * Y ) or height; -- Height pg = postGUI or false; -- PostGUI i = {}; -- Items mi = __calcMaxItems ( FIT_MODE and ( height * Y ) or height ); -- Max items s = 1; -- Scroll Level r = -1; -- Row count se = -1; -- Selected item mo = nil; -- Mouse-on item vis = true -- Visible }; setmetatable ( data, { __index = dxGrid1 } ); table.insert ( dxGrid1.items, data ); return data; end end function dxGrid1:Destroy () -- bool dxGrid:Destroy () for k, v in pairs ( dxGrid1.items ) do if v == self then dxGrid1.items[k] = nil; return true; end end return false; end function dxGrid1:SetItemText (itemID, column, new_text ) if __checkParams ( "SetItemText", "nns", itemID, column, new_text ) then if self.i[column] and self.i[column][itemID] then self.i[column][itemID].text = new_text return self.i[column][itemID].text == new_text end end return false end function dxGrid1:SetVisible ( visible ) -- bool Gridlist:SetVisible ( bool state ) if __checkParams ( "SetVisible", "b", visible ) then self.vis = visible return true else return false end end function dxGrid1:IsVisible ( ) -- bool Gridlist:IsVisible() return self.vis end function dxGrid1:AddColumn ( title, width ) -- int Gridlist:AddColumn ( string title, int width ) if __checkParams ( "AddColumn", "sn", title, width ) then local data = { info = { title = title, width = FIT_MODE and ( width * X ) or width } }; table.insert ( self.i, data ); return #self.i; end end function dxGrid1:RemoveColumn ( columnIndex ) -- bool Gridlist:RemoveColumn ( int columnIndex ) if __checkParams ( "RemoveColumn", "n", columnIndex ) then self.i[columnIndex] = nil; -- Recalculate the highest item count local highest = -1; for _, v in ipairs ( self.i ) do if #v > highest then highest = ( #v - 1 ); end end self.r = highest; -- Recalculate the scroll level (if necessary) if ( ( ( self.s + self.mi ) - 2 ) == self.r ) then self.s = ( self.r - self.mi ) + 1; end return true end return false end function dxGrid1:GetColumnCount () -- int Gridlist:GetColumnCount() return #self.i end function dxGrid1:AddItem ( columnIndex, text, data, r, g, b ) -- int Gridlist:AddItem ( int columnIndex, string title[, mixed data, int r, int g, int b ] ) if __checkParams ( "AddItem", "ns", columnIndex, text ) then if self.i[columnIndex] then local tColor = __checkRGB ( r, g, b ) and { r, g, b } or { 255, 255, 255 }; table.insert ( self.i[columnIndex], { id = #self.i[columnIndex] + 1, text = tostring( text ), data = data, color = tColor } ); if #self.i[columnIndex] > self.r then self.r = #self.i[columnIndex]; end return #self.i[columnIndex]; end return false; end end function dxGrid1:RemoveItem ( column, itemID ) -- bool Gridlist:RemoveItem ( int columnIndex, int itemIndex ) if __checkParams ( "RemoveItem", "nn", column, itemID ) then if self.i[column] and self.i[column][itemID] then -- Recalculate the highest item count if self.r == #self.i[column] then local highest = -1; for _, v in ipairs ( self.i ) do if #v > highest then highest = ( #v - 1 ); end end self.r = highest; end -- Recalculate the scroll level (if necessary) if ( ( ( self.s + self.mi ) - 2 ) == self.r ) then self.s = ( self.r - self.mi ) + 1; end -- Reset the selected item if necessary² if itemID == self.se then local newItem = self.se - 1 if newItem <= self.r then self.se = math.max ( 0, newItem ); else self.se = -1 end end table.remove ( self.i[column], itemID ); return true; end return false end end function dxGrid1:GetItemCount ( columnID ) -- int Gridlist:GetItemCount ( int columnIndex ) if __checkParams ( "GetItemCount", "n", columnID ) then if self.i[columnID] then return #self.i[columnID] end return false end end function dxGrid1:Clear () -- bool Gridlist:Clear() for k, v in ipairs ( self.i ) do self.i[k] = { info = v.info } end self.r = -1 self.se = nil -- Recalculate the scroll level self.s = 1; return true end function dxGrid1:GetSelectedItem ( ) -- int Gridlist:GetSelectedItem () return self.se; end function dxGrid1:SetSelectedItem ( itemID ) -- bool Gridlist:SetSelectedItem ( int itemIndex ) if __checkParams ( "SetSelectedItem", "n", itemID ) then if itemID <= self.r then self.se = itemID; return self.se == itemID; end return false; end end function dxGrid1:GetItemDetails ( column, itemID ) -- string, mixed Gridlist:GetItemDetails ( int columnIndex, int itemIndex ) if __checkParams ( "GetItemDetails", "nn", columnID, itemID ) then if self.i[column] then if self.i[column][itemID] then return self.i[column][itemID].text, self.i[column][itemID].data end end return false end end --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Core - render/move addEventHandler ( "onClientRender", root, function ( ) -- Is there any gridlist to render? if #dxGrid1.items > 0 then -- Loop through all grid lists for index, data in ipairs ( dxGrid1.items ) do -- Is the gridlist visible? if data.vis then -- Draw the 'gridlist' itself dxDrawRectangle (data.x, data.y, data.w, data.h, tocolor ( 0, 0, 0, 100), data.pg ); -- Draw the column bar dxDrawRectangle ( data.x, data.y, data.w, 30 % data.h, tocolor (255, 0 , 0 , 255), data.pg ); -- Set cursorOn variable to the current gridlist, if it's selected cursorOn = nil if __isMouseInPosition ( data.x, data.y, data.w, data.h ) then cursorOn = index; end -- Check if there's any selected item local seeFrom = data.s; local seeTo = ( data.s + data.mi ) - 1; if data.se and data.se <= data.r and data.se >= seeFrom and data.se <= seeTo then local index = data.se - ( data.s - 1 ); local y2 = data.y + ( ( index - 1 ) * 25 ); -- Draw a rectangle to make it looks like selected dxDrawRectangle ( data.x, ( 30 % data.h ) + y2, data.w, 25, tocolor ( 0, 0, 0, 110 ), data.pg ); -- dxDrawRectangle ( data.x, ( 30 % data.h ) + y2, data.w, 25, tocolor (0, 0, 0, ), data.pg ); end -- Is there any column? if #data.i > 0 then local cWidth = 0 -- Loop through all columns for cIndex, cData in ipairs ( data.i ) do -- we'll go beyond the gridlist width with this column ? if ( ( cWidth + cData.info.width ) <= data.w ) then local x = data.x + cWidth; -- Draw the column title dxDrawText ( cData.info.title, x + 10, data.y, cData.info.width + x, ( 30 % data.h ) + data.y, tocolor ( 0, 0, 0 , 220 ), FIT_MODE and ( 1 * SCALE ) or 1, font_10, "left", "center", true, true, data.pg, false, true ); -- Reset the selected item cData.info.selected = -1; -- Is there any item ? if #cData > 0 then local seeFrom = data.s; local seeTo = ( data.s + data.mi ) - 1; -- Loop the items for iIndex = seeFrom, seeTo do -- There's a row with this index in the current column? if cData[iIndex] then local index = iIndex - ( data.s - 1 ); local y = data.y + ( index * 25 ); local y2 = data.y + ( ( index - 1 ) * 25 ); -- Check if cursor is on item position if __isMouseInPosition ( data.x, ( 30 % data.h ) + y2, data.w, 25 ) then -- Define the mouse-on variable data.mo = iIndex; end -- Draw the item text dxDrawText ( cData[iIndex]["text"], x + 10, y, cData.info.width + x, ( 30 % data.h ) + y + 5, tocolor ( 255, 255, 255, 255), FIT_MODE and ( 1 * SCALE ) or 1, font_11, "left", "center", true, true, data.pg, true, true ); end end end -- Increase cWidth variable (to draw the columns correctly) cWidth = cWidth + cData.info.width; end end end end end end end , true, "low-5") -- addEventHandler ( "onClientKey", root, function ( button, press ) -- Is cursor showing? if isCursorShowing () then -- Is there any gridlist? if #dxGrid1.items > 0 then -- Is there any selected gridlist? if cursorOn then -- We pressed the scroll? if press and #button > 6 then -- Does the gridlist requires scroll? if dxGrid1.items[cursorOn].r > dxGrid1.items[cursorOn].mi then -- Define some variables local index = cursorOn; local currentValue = dxGrid1.items[index].s; local newValue = math.max(1, button == "mouse_wheel_down" and currentValue + 2 or button == "arrow_d" and currentValue + 2 or button == "mouse_wheel_up" and currentValue - 1 or button == "arrow_u" and currentValue - 1) -- Check if we have spent the row's limit with the new value if ( ( newValue + dxGrid1.items[index].mi ) > dxGrid1.items[index].r ) then newValue = ( dxGrid1.items[index].r - dxGrid1.items[index].mi ) + 1; end -- Set the new scroll level dxGrid1.items[index].s = newValue; end elseif press and button == "mouse1" and dxGrid1.items[cursorOn].mo then dxGrid1.items[cursorOn].se = dxGrid1.items[cursorOn].mo; end end end end end ) --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Useful function __calcMaxItems ( height ) for i = 0, 9999 do if ( ( ( i + 1 ) * 25 ) >= math.floor ( height ) ) then return ( ( ( i + 1 ) * 25 ) > math.floor ( height ) and ( i - 1 ) or i ); end end return false; end function __checkParams ( methodName, pattern, ... ) local cTable = { ["string"] = "s"; ["number"] = "n"; ["boolean"] = "b"; ["s"] = "string"; ["n"] = "number"; ["b"] = "boolean" }; if #pattern > table.maxn ( { ... } ) then local index = table.maxn ( { ... } ) == 0 and 1 or table.maxn ( { ... } ) + 1 --return false, error ( "Bad Argument @ '"..methodName.."' [Expected "..cTable[ pattern:sub ( index, index ) ].." at argument "..index..", got none]" ) end for k, v in pairs ( { ... } ) do if cTable[ type ( v ) ] ~= pattern:sub ( k, k ) then ---return false, error ( "Bad Argument @ '"..methodName.."' [Expected "..cTable[ pattern:sub ( k, k ) ].." at argument "..k..", got "..( type ( v ) or "none" ).."]" ) end end return true; end function __checkRGB ( r, g, b ) -- Check if all parameters were passed if ( not r ) or ( not g ) or ( not b ) then return false; end for _, v in ipairs ( { r, g, b } ) do if ( type ( v ) ~= "number" ) or ( v < 0 ) or ( v > 255 ) then return false; end end return true; end function __isMouseInPosition ( x, y, w, h ) if not isCursorShowing() then return false end local res = { guiGetScreenSize() }; local cpos = { getCursorPosition() }; local fpos = { res[1] * cpos[1], res[2] * cpos[2] }; return ( fpos[1] >= x and fpos[1] <= x + w ) and ( fpos[2] >= y and fpos[2] <= y + h ) end
  21. Cade a função de criação do gridlist?
  22. Mostre seu código para podermos ajuda-lo! Possivelmente sera usado: onPlayerDamage setElementHealth
×
×
  • Create New...