Developer.

Members
  • Content Count

    85
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Developer.

  1. Developer.

    Building

    local player = getLocalPlayer(); local build function building(key, state) if (key == "b") then -- check Key pressed if (state == "down") then -- check state destroy(build) -- useful local x, y, z = getElementPosition(player); build = createObject(3374, x, y, z, 0, 0, 0); setElementAlpha(build, 150); attachElements(build, player , 0, 3, -1, 0, 0, 0); elseif (state =="up") then -- check state if isElementAttached(build) then setElementAlpha(build, 255); detachElements(build, player); setTimer(function() destroy(build) end, 1500, 1); end end end end bindKey("b", "both", building) function destroy(element) -- useful function if isElement(element) then -- if exists destroyElement(element) -- destroy end end
  2. Funções, eventos e resource's que você vai necessitar para fazer esse script: Server-Side ( lado servidor) addCommandHandler getPlayerByID ou getPlayerFromPartialNick (as duas são funções úteis, mandarei logo abaixo.) givePlayerMoney addEvent addEventHandler Client-Side (lado cliente) guiEditor (resource útil, só clicar para ser redirecionado a community.) cursorPosition (função útil, mandarei logo abaixo.) triggerServerEvent onClientClick getPlayerByID: function getPlayerByID(id) v = false for i, player in ipairs (getElementsByType("player")) do if getElementData(player, "ID") == id then v = player break end end return v end getPlayerFromPartialName: function getPlayerFromPartialName (name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end cursorPosition: 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
  3. @MesaDowN O state é um parâmetro do evento onClientClick (no caso o segundo parâmetro). o state ele verifica se o player Pressionou o botão ("down") ou se ele solto o botão ("up").
  4. @+snts Bom a não ser que você queira mostrar alguma imagem/texto na tela do player é totalmente desnecessário a conexão entre server e client. Esse script em especifico pode ser somente server-side sem problemas, inclusive é o que eu recomendo. No caso o certo a se fazer seria você declarar o parâmetro e passar ele, só isto acho que já resolveria os erros function SpawnMoto (jogador) local x,y,z = getElementPosition(jogador) No caso do script do #Roots seria algo assim: local veh = {} function SpawnMoto (jogador) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(522, x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) Seria legal você já pensar em usar os outros parâmetros tipo: local veh = {} function SpawnMoto (jogador, comando, id) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(tonumber(id),x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) 3 parâmetros o ultimo(id) seria o id do veiculo! Então vc iria digitar tipo /moto 522 ai apareceria a NRG, ou se vc digitasse /moto 462 aparecia outro veiculo e assim por diante... Teste e nos de um retorno se esta funcionando ou não.
  5. @Gaimo Bom tem duas formas, para dx em especifico tem a função util IsCursorOnElement ou você pode criar um botão com gui GuiCreateButton Exemplo Dx: local posX, posY, posW, posH = 500, 500, 200, 200 local painel = true function teste(button,state) if painel == true then if state == "down" then if isCursorOnElement(posX, posY, posW, posH ) then outPutChatBox("Teste Dx bem-sucedido") end end end end addEventHandler ("onClientClick", root, teste) -- função util 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 Exemplo Gui: function testeGui() botao = guiCreateButton(500, 500, 50, 32, "testeGui", false) -- guiSetAlpha(botao, 0) -- deixa o botão invisivel addEventHandler("onClientGUIClick", botao, testeGui2) end addEventHandler("onClientResourceStart", resourceRoot, testeGui) function testeGui2() outputChatBox("Teste gui bem-sucedido") end No exemplo do gui, vc criaria os botão embaixo das imagens. Então tipo a imagem é só algo realmente visual, o que importa é o botão onde o player clicou que estará invisível.
  6. Bom é assim, se formos traduzir o erro seria algo neste sentido: Esperado ped/player no argumento 1, recebeu valor nil (nil é um valor inexistente) Isto ocorreu porque você não declarou o parâmetro da sua função. Se você observar na wiki o evento (addCommandHandler), vai ver que em um trecho ele fala sobre playerSource e argumentos. Mais precisamente isto aqui que estou me referindo: http://prntscr.com/r7neut Para todas as funções no MTA, existe um SOURCE. Source é o nativo daquela função, é o objeto/player/marker em que a função tem como base. Podemos acionar este source simplesmente digitando source, Exemplo Prático: local px, py, pz = getElementPosition(source) -- pegamos a posição do parâmetro nativo da função(source) warpPedIntoVehicle(source, VehCar) -- forçamos o player no veículo usando um parâmetro nativo da função(source) e uma variavel (VehCar) Obs: o SOURCE do addCommandHandler é o player que digitou o comando. -- Olhando para o seu script nós temos na linha 1 function -- function Indicamos que estamos iniciando uma função que ira executar algo SpawnMoto -- o nome desta função () -- e os parâmetros, ou seja a quem ela seja direcionada. Podemos perceber aqui que não existe nenhum parâmetro! Se não existe nenhum parâmetro DECLARADO, se formos olhar para a linha 4 player não existe, pois ele não foi declarado em nenhum momento. Obs: Não necessariamente você precisa escrever "player", eu posso colocar "ciranda_cirandinha" no lugar de "player" que irá funcionar normalmente. -- Na linha dois tem um outro erro: local px, py, pz = -- 3 váriaveis getElementPosition -- a função (getLocalPlayer()) -- o argumento Nós temos dois lados, o lado cliente e o lado servidor. Lado servidor é o que será executado na host, e o lado cliente é o executado no pc do player. Se você pesquisar por getLocalPlayer() na wiki você vai ver isto: http://prntscr.com/r7npad. Client-Side Only, ou seja somente lado cliente isto você pode identificar no meta.xml temos <script src="nomeDoArquivo" type="client"/> ou <script src="nomeDoArquivo" type="server"/> o type diz quais funções você pode usar naquele arquivo... Obs: temos também funções do tipo shared que funcionam tanto nos arquivos de lado client, quanto nos arquivos de lado server. Ex: http://prntscr.com/r7nr9j -- Basicamente é isso maninho esses foram os erros em seu script, use o código que o #Roots mandou e pesquise sobre "tabelas", é algo que vai ser muito essencial para você desenvolver seus próximos códigos :).
  7. Bom eu faria desta forma, ao meu ver é mais fácil: enterMarker = { -- index valor [1] = {createMarker(1170.88306, -1489.64990, 22.75516 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 1 [2] = {createMarker(1147.24207, -1487.55115, 22.76903 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 2 [3] = {createMarker(1159.714, -1511.431, 22.748 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 3 }; for i=1, #enterMarker do createBlipAttachedTo(enterMarker[i][1], 45) -- mesma coisa do seu createMarker porém com blip e com um for diferente. end -- abaixo a funcaoExemplo, vc pode criar funções proprias e automatizar seu script. -- em vez de eu colocar setElementModel em cada if/elseif, eu chamo a função que já faz isso por mim. function funcaoExemplo(playerSource, number) -- abaixo o setElementModel. -- se vc for na wiki essa função requer um player ou um ped (playerSource), e tambem o modelo no caso o (number) setElementModel(playerSource, number) end function hitarMarker(marker, dim) if dim then -- abaixo ele verifica se o marker hitado é equivalente ao index [1] valor [1] da tabela enterMarker, ou seja a marker criada 1. if marker == enterMarker[1][1] then outputChatBox("loja 1", source, 0, 255, 0) funcaoExemplo(source, 1) -- chamando a função criada por mim, setando ao source (player) a skin (1) elseif marker == enterMarker[2][1] then -- verificação no index [2] valor [1] outputChatBox("loja 2", source, 0, 255, 0) funcaoExemplo(source, 2) -- chamando a função criada por mim, setando ao source (player) a skin (2) elseif marker == enterMarker[3][1] then -- verificação no index [3] valor [1] outputChatBox("loja 3", source, 0, 255, 0) funcaoExemplo(source, 7) -- chamando a função criada por mim, setando ao source (player) a skin (7) end end end addEventHandler("onPlayerMarkerHit", getRootElement(), hitarMarker)
  8. Comprado? Bom sem o código fica bem difícil lhe ajudar meu querido...
  9. Ta ai, um sistema simples de Detran. local acl = "Detran" -- acl que tem permissão para efetuar os comandos /guinchar /soltar e pegar o carro do detran. local detran = { vtr = {}, last = {}, inUse = {}, guinchado = {}, }; function darCarro(jogador) if isPlayerInACL(jogador, acl) then if detran.inUse[jogador] ~= true then if detran.vtr[jogador] then destroyElement(detran.vtr[jogador]) detran.vtr[jogador] = nil end detran.vtr[jogador] = createVehicle(578, 1547.663, -2303.496, 13.545,-0, 0, 1.548) warpPedIntoVehicle(jogador, detran.vtr[jogador]) outputChatBox("#FFA500[Detran]:#FFFFFFVocê pegou carro do Detran", jogador, 255, 255, 255, true) else outputChatBox("#FFA500[Detran]:#FFFFFFVocê não pode pegar um novo carro do Detran", jogador, 255, 255, 255, true) end end end addEventHandler("onPickupHit", carro, darCarro) function salvar_Carro (vehicle, seat, jacked) if isPlayerInACL(source, acl) then detran.last[source] = vehicle end end addEventHandler('onPlayerVehicleEnter', getRootElement(), salvar_Carro) function guinVeh (jogador) if isPlayerInACL(jogador, acl) then local vtr = detran.vtr[jogador] local veh = detran.last[jogador] local vtrx, vtry, vtrz = getElementPosition(vtr) local vehx, vehy, vehz = getElementPosition(veh) local dist = getDistanceBetweenPoints3D(vtrx, vtry, vtrz, vehx, vehy, vehz) if (vtr) and (veh) then if dist < 5.5 then if not detran.inUse[jogador] then attachElements(veh, vtr, 0, -1, 1) detran.guinchado[jogador] = veh detran.inUse[jogador] = true outputChatBox("#FFA500[Detran]:#FFFFFFVeículo guinchado!", jogador, 255, 255, 255, true) else outputChatBox("#FFA500[Detran]:#FFFFFFVocê já guinchou um veículo!", jogador, 255, 255, 255, true) end else outputChatBox("#FFA500[Detran]:#FFFFFFAproxime o guincho do veículo!", jogador, 255, 255, 255, true) end end end end addCommandHandler("guinchar", guinVeh) function soltarVeh (jogador) if isPlayerInACL(jogador, acl) then local vtr = detran.vtr[jogador] local veh = detran.guinchado[jogador] local jogx, jogy, jogz = getElementPosition(jogador) local vtrx, vtry, vtrz = getElementPosition(vtr) local dist = getDistanceBetweenPoints3D(jogx, jogy, jogz, vtrx, vtry, vtrz) if (vtr) and (veh) then if dist < 3.5 then if detran.inUse[jogador] then detachElements(veh, vtr) detran.inUse[jogador] = false detran.guinchado[jogador] = nil outputChatBox("#FFA500[Detran]:#FFFFFFVeículo liberado!", jogador, 255, 255, 255, true) end else outputChatBox("#FFA500[Detran]:#FFFFFFAproxime-se do guincho!", jogador, 255, 255, 255, true) end end end end addCommandHandler("soltar", soltarVeh) function isPlayerInACL(player, acl) if isElement(player) and getElementType(player) == "player" and aclGetGroup(acl or "") and not isGuestAccount(getPlayerAccount(player)) then local account = getPlayerAccount(player) return isObjectInACLGroup( "user.".. getAccountName(account), aclGetGroup(acl) ) end return false end Se ocorrer algum erro, só estar comentando aqui. Não se esqueça de ativar seu debugscript (/debugscript 3). @zking0d
  10. - Crie uma tabela - Insira o veículo dentro da tabela - Use onPlayerVehicleEnter como evento. local viatura = {} -- tabela criada function salvar_Carro (vehicle, seat, jacked) viatura[source] = vehicle -- veiculo inserido end addEventHandler('onPlayerVehicleEnter', getRootElement(), salvar_Carro) -- evento de ativação!
  11. Faça o seguinte. Nas linhas 436, 437, 439 e 440 troque player por source. Algumas dicas simples: - Antes de tudo, procure postar suas duvidas nesta seção, pois isto ajuda a manter a organização do fórum: https://forum.mtasa.com/forum/127-programação-em-Lua/ - Abaixo vou deixar um post explicando melhor como funciona este fórum: - Sempre que estiver mexendo com seus mods ative o debugscript 3, digitando /debugscript 3 no chat ( para desligar use /debugscript 0). Isto lhe ajuda a identificar o que esta dando erro! - Se você entende quase 0 de scripts de uma olhada nesses posts: Post por manawydan - Lógica de Programação Básica: Post por DNL291 - Informações úteis - Scripting/Configurações/Tutoriais para o MTA: Para finalizar, caso não funcione o script só estar comentando novamente, e por favor se puder informe o erro com uma print ou algo do tipo (não se esqueça de ativar o debugscript!). Facilita bastante a estar te ajudando.
  12. Sim, a tbm recomendo você mudar aquele getPlayerFromName() por getPlayerFromPartialName() isso muda a forma que vc tem q digitar exemplo se vc quiser me algemar com getPlayerFromName(), você teria que digitar /a eder já com getPlayerFromPartialName() você pode simplesmente digitar /a ede ou /a ed que a função já retorna o player. se não me engano o Jonas^ mandou essa function no seu outro post, da uma procurada lá.
  13. tem duas formas de vc arrumar esse erro. 1 - em vez de passar direito, atribua uma variável ao getDistanceBetweenPoints3D e depois faz a verificação: local dist = getDistanceBetweenPoints3D(x1,y1,z1,x,y,z) if isPlayerPermission(hit) then if dist <= 20 then 2 - ou usar tonumber() no if: if tonumber(getDistanceBetweenPoints3D(x1,y1,z1,x,y,z)) <= 20 then
  14. local posicoesCJ = { { 2488, -1670, 14 }, } local posicoesPraia = { { 324, -1779, 5 }, } local segundos = 5 -- tempo em segundos local tempo = {} -- tabela que salva o tempo. function PosicaoPlayer ( jogador, comando ) if getTickCount() - (tempo[jogador] or 0) >= segundos * 1000 then -- faz a contagem se já passou os 5 segundos para o player. local veh = getPedOccupiedVehicle(jogador) local nome = getPlayerName(jogador) if comando == "cj" then if (veh) then setElementPosition(veh, unpack(posicoesCJ[math.random(#posicoesCJ)])) else setElementPosition(jogador, unpack(posicoesCJ[math.random(#posicoesCJ )])) end tempo[jogador] = getTickCount() outputChatBox ('#FFFFFF[ #00FF00Tele#FFFFFF ]: #FFFFFF'..nome..' #828282Foi Para A Casa Do Cj #FFFFFF(#00FF00 /cj #FFFFFF)', root, 255, 255, 255, true) elseif comando == "praia" then if (veh) then setElementPosition(veh, unpack(posicoesPraia[math.random( #posicoesPraia )])) else setElementPosition(jogador, unpack(posicoesPraia[math.random(#posicoesPraia)])) end tempo[jogador] = getTickCount() outputChatBox ('#FFFFFF[ #00FF00Tele#FFFFFF ]: #FFFFFF'..nome..' #828282Foi Para A Praia #FFFFFF(#00FF00 /praia #FFFFFF)', root, 255, 255, 255, true) end else outputChatBox ('#FFFFFF[ #00FF00Anti-flood#FFFFFF ]: #FFFFFFAguarde Para utilizar o comando novamente!', jogador, 255, 255, 255, true) end end addCommandHandler("cj", PosicaoPlayer) addCommandHandler("praia", PosicaoPlayer) Testado! Pronto, arrumado. O erro estava nos Parênteses da linha 16 @SkillZNT
  15. local posicoesCJ = { { 2488, -1670, 14 }, }; local posicoesPraia = { { 324, -1779, 5 }, }; local segundos = 5 -- tempo em segundos local tempo = {} -- tabela que salva o tempo do jogador. function PosicaoPlayer ( jogador, comando ) if (getTickCount() - tempo[jogador] or 0) >= segundos * 1000) then -- faz a contagem se já passou os 5 segundos para o jogador. local veh = getPedOccupiedVehicle(jogador) local nome = getPlayerName(jogador) if comando == "cj" then if (veh) then setElementPosition(veh, unpack(posicoesCJ[math.random(#posicoesCJ)])) else setElementPosition(jogador, unpack(posicoesCJ[math.random(#posicoesCJ )])) end tempo[jogador] = getTickCount() outputChatBox ('#FFFFFF[ #00FF00Tele#FFFFFF ]: #FFFFFF'..nome..' #828282Foi Para A Casa Do Cj #FFFFFF(#00FF00 /cj #FFFFFF)', root, 255, 255, 255, true) elseif comando == "praia" then if (veh) then setElementPosition(veh, unpack(posicoesPraia[math.random( #posicoesPraia )])) else setElementPosition(jogador, unpack(posicoesPraia[math.random(#posicoesPraia)])) end tempo[jogador] = getTickCount() outputChatBox ('#FFFFFF[ #00FF00Tele#FFFFFF ]: #FFFFFF'..nome..' #828282Foi Para A Praia #FFFFFF(#00FF00 /praia #FFFFFF)', root, 255, 255, 255, true) end else outputChatBox ('#FFFFFF[ #00FF00Anti-flood#FFFFFF ]: #FFFFFFAguarde Para utilizar o comando novamente!', jogador, 255, 255, 255, true) end end addCommandHandler("cj", PosicaoPlayer) addCommandHandler("praia", PosicaoPlayer) Obs: Não testado! Ligue primeiro seu debug ( /debugscript 3) e depois inicie o resource! 7 Caso de algum erro só mandar aqui que irei consertar. @SkillZNT
  16. Olá novamente @vanessa, acabei deixando passar no outro post porém para ficar mais fácil de estarmos te ajudando, por favor poste o seu código corretamente clicando sobre o botão code <> Abaixo uma imagem ilustrativa do botão: Se você puder estar editando o seu tópico e fazendo desta maneira, ficara mais fácil para os membros lhe ajudar! Bom quanto ao seu problema você chegou a verificar seu /debugscript 3? Para ver se aparece algum erro quanto aos Resources? Qual o problema exato com a sua hud? Ela não liga? Ela liga, porém falta alguma coisa nela ou algo do tipo?
  17. Ok, sem problemas. Bom vou estar te passando dois tópicos, um é de como você estar usufruindo do fórum da maneira certa! É um tutorial em vídeo feito pelo Lord Henry link abaixo: O outro link é um outro tutorial, meio que um "passo-a-passo" feito pelo DNL291 sobre como começar na linguagem Lua no MTA. Leia com calma e paciência! Segue o link abaixo: Agora vamos lá. Primeiro o que é ELEMENT DATA? É uma forma de você salvar um dado ao player exemplo: o player Eder esta sendo revistado, eu quero salvar isso a mim o que eu faço? coloco setElementData(playerRevistado, "sendo:Revistado", playerRevistado), dessa forma eu acabei de colocar um dado a mim. Agora se eu quiser ver se eu estou sendo revistado ou não? Eu faço isto: if getElementData(playerRevistado, "sendo:Revistado") == true then ou seja se eu tiver esta data "sendo:Revistado" então algo acontecerá comigo... Vamos ao código: 1 - onde esta escrito local bank, coloque isto aqui: local bank = format(tonumber(getElementData(jogador, "Bank:Caixa") or 0)); Caso não funcione o problema deve estar no nome da data "Bank:Caixa", para verificar vc tem q abrir o seu mod do banco e procurar por isto lá dentro! 2 - para "adicionar a fome, sede e sono é necessário onde tem isto: local Fome = format(tonumber(getElementData(jogador, "hunger")) or 0); -- data da fome local Sede = format(tonumber(getElementData(jogador, "sede")) or 0); -- data da sede local Sono = format(tonumber(getElementData(jogador, "sono")) or 0); -- data do sono Os nomes "hunger", "sede" e "sono" precisam estar EXATAMENTE iguais ao que esta no seu mod de lanchonete! Para estar mudando é só apagar o que esta entre as aspas " ", e digitar com letras maiúsculas e minusculas o nome certo da data que esta lá no mod de lanchonete. Normalmente só abrir o arquivo e pesquisar por setElementData ou getelementData que vc encontrará. O básico é isso. Caso não tenha entendido só estar perguntando novamente, que tentarei lhe ajudar! Edit: E não se esqueça de ativar o debugscript 3!!
  18. Olha sendo sincero, essa de arquivo sumir eu nunca vi, o que pode acontecer é que talvez você mudou o nome do seu arquivo e esqueceu de abri-lo novamente no editor de códigos, enfim tem algumas hipóteses. Relacionado ao código mudei algumas coisas e adicioneis outras. Como eu não tenho todos os arquivos por exemplo os de imagem trabalhei no que pude! Obs: antes de iniciar o código verifique se tudo esta certinho no arquivo meta.xml e ligue o debugscript, digitando /debugscript 3 pra ligar e /debugscript 0 para desligar. Mude também as datas de fome, sede e sono para o seu sistema de lanchonete. Adicionei um sistema simples que permite o player desativar a hud pressionando o botão f10, caso queira mudar só olhar o sistema e procurar por "botao_ligar_hud" Segue abaixo o código: local screenW,screenH = guiGetScreenSize() local resW, resH = 1366,768 local x, y = (screenW/resW), (screenH/resH) local jogador = getLocalPlayer() local botao_ligar_hud = "F10" -- para ligar ou desligar a hud. function hourFormat() local realtime = getRealTime() return string.format("%02d:%02d:%02d", realtime.hour, realtime.minute, realtime.second) end function format(val, decimal) if (decimal) then return math.floor( (val * 10^decimal) + 0.5) / (10^decimal) else return math.floor(val+0.5) end end function drawHud() local dinheiro1 = format(getPlayerMoney(jogador)); local bank = format(getElementData(jogador, "Bank:Caixa") or "0"); local Procurado = getPlayerWantedLevel(jogador); local Emp = (getElementData(jogador, "Emprego") or "Desempregado"); local showammo1 = getPedAmmoInClip (jogador, getPedWeaponSlot(jogador)); local showammo2 = getPedTotalAmmo(jogador) - getPedAmmoInClip(jogador); local weapon = getPedWeapon (jogador); local arma = getWeaponNameFromID (weapon); local ID = (getElementData(jogador, "ID") or "N/A"); local armor = (getPedArmor(jogador)); local Fome = format(tonumber(getElementData(jogador, "hunger")) or "100"); -- data da fome local Sede = format(tonumber(getElementData(jogador, "sede")) or"100"); -- data da sede local Sono = format(tonumber(getElementData(jogador, "sono")) or "100"); -- data do sono --local level = (getElementData(jogador, "Level") or "0"); dxDrawImage(x*1009, y*38, x*422, y*210, "images/fundo.png", 0, 0, 0, tocolor(3, 224, 251, 255), false) dxDrawImage(x*1159, y*48, x*111, y*20, "images/Vida.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1159, y*78, x*114, y*21, "images/Colete.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1159, y*119, x*116, y*21, "images/Fome.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1159, y*150, x*116, y*21, "images/Fome.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1159, y*181, x*116, y*21, "images/Fome.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText("fome %"..Fome, x*1196, y*48, x*1251, y*80, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("colete %"..armor, x*1196, y*83, x*1251, y*115, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawImage(x*1256, y*20, x*100, y*109, "images/logocat.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText("Fome: "..Fome.."%", x*1196, y*124, x*1256, y*156, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("Sede: "..Sede.."%", x*1196, y*146, x*1256, y*178, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("Sono: "..Sono.."%", x*1196, y*181, x*1256, y*213, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText("Seu id: "..ID.."", x*1015, y*223, x*1360, y*259, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawImage(x*1035, y*133, x*100, y*97, "icons/0.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText("Arma: "..arma.. " || Pente: " ..tostring (showammo1).." / "..tostring (showammo2), x*1015, y*258, x*1132, y*276, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText(""..dinheiro1.."", x*1015, y*48, x*1091, y*73, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText(""..bank.."", x*1015, y*83, x*1112, y*129, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawText(""..Emp.."", x*1196, y*258, x*1332, y*287, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawImage(x*1122, y*48, x*29, y*25, "images/logodinheiro.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1122, y*75, x*29, y*24, "images/logobanco.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1275, y*115, x*29, y*25, "images/comida.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1280, y*145, x*24, y*26, "images/bebida.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*1278, y*179, x*27, y*24, "images/sono.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText(""..Procurado.."", x*1015, y*9, x*1090, y*38, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "top", false, false, false, false, false) dxDrawImage(x*1009, y*24, x*22, y*14, "images/procurado.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) local cTime = hourFormat() or "00:00:00" dxDrawText ( "Hora: "..cTime.."", x*1160, y*220, x*1275, y*238, tocolor ( 255, 255, 255, 255 ), 0.55, "bankgothic" ) end addEventHandler("onClientRender", root, drawHud, false) function showHud (button, press) if button == botao_ligar_hud then if (press)then if not isEventHandlerAdded("onClientRender", root, drawHud) then addEventHandler("onClientRender", root, drawHud, false) else removeEventHandler("onClientRender", root, drawHud, false) end end end end addEventHandler("onClientKey", getRootElement(), showHud, false) local hudTable = { "ammo", "armour", "clock", "health", "money", "weapon", "wanted", "area_name", "vehicle_name", "breath", "clock" } addEventHandler("onClientResourceStart", resourceRoot, function() for _, hudComponents in ipairs(hudTable) do setPlayerHudComponentVisible(hudComponents, false) end end) addEventHandler("onClientResourceStop", resourceRoot, function() for _, hudComponents in ipairs(hudTable) do setPlayerHudComponentVisible(hudComponents, true) end end) 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 Para copiar o código corretamente, pressione o simbolo de prancheta que fica no lado superior esquerdo onde se iniciar o código! Caso de algum erro, verifique seu debugscript ou mande uma print aqui se necessário.
  19. addCommandHandler("versujo", function(player, cmd, target ) local accName = getAccountName(getPlayerAccount(player)) if not isObjectInACLGroup ("user."..accName, aclGetGroup("Policial")) then outputChatBox("Ops! Sinto Muito :( , Você não tem permissão para executar esta função", player, 255, 0, 0) return end if target then local targetplayer = getPlayerFromName(target) if targetplayer then local pX, pY, pZ = getElementPosition(player) -- posição do policial local bX, bY, bZ = getElementPosition(targetplayer) -- posição do abordado local dist = getDistanceBetweenPoints3D(pX, pY, pZ, bX, bY, bZ) -- calcula a distancia da duas posições if dist < 3 then -- se a distancia for menor que 3 então: local Dinheiro_Sujo = getElementData ( targetplayer, "moneysujo" ) outputChatBox ( "#0037FF✘#ffffffINFO#0037FF✘➺ #ffffffO Jogador Tem: #FF0000R$"..Dinheiro_Sujo.."#ffffff Na Carteira !", player, 255, 0, 0, true ) end else --se não for então: outputChatBox ( "#0037FF✘#ffffffINFO#0037FF✘➺ #ffffffVocê esta muito longe!", player, 255, 0, 0, true ) end end end end) Obs: não testado Vê se isso funciona.
  20. debug é para você ver se tem alguma linha de Código dando erro, aperte f8 e digite debugscript 3, quanto ao script eu testei e ta funcional. O que pode estar acontecendo é esse setPedAnimationSpeed não existir! Recomendo trocar por isso aqui: function setPedAnimationSpeed(player,anim,speed) setPedAnimation(player,anim,speed) end Não entendi muito bem seu script pois o player mesmo algemado ainda pode se mover acredito eu q ele deveria ficar imóvel mas enfim... Ah e claro verifique se as ACLS BOPE e PMRJ existem e que sua conta tem permissão nelas!
  21. Bom o seu script não funciona pelo seguinte: if isObjectInAcl é uma verificação! Ou seja ela verifica se o player esta, tem, pode, não tem, não pode ou não esta. No seu código você primeiro não esta verificando nada, segundo não colocou um end e terceiro não existe a variável accountName no seu código. (Logica): Para eu verificar algo eu tenho que estar antes do resultado certo? Um exemplo bem besta, antes de eu beber água o que eu preciso? Um copo e um filtro correto? Se eu não tenho o copo vou beber como? Mas se eu tenho o copo e não tenho o filtro da onde a água vai sair? Entende o que eu quero dizer? if seria você mesmo ver se tem o copo na sua mão e se o filtro esta na sua frente... Agora voltando ao seu código o que você esta verificando colocando o if isObjectInAcl lá em baixo? Depois de todo o código? Não tem o menor sentido concorda? Então o if isObjectInAcl tem q estar lá em cima certo? o que é end? end é o fim de algo em Lua, 'PARA TUDO TEM QUE HAVER UM FIM' nos códigos não é diferente, toda vez que tiver um if, é OBRIGATÓRIO ter um end. o que é accountName? accountName é uma variável. Variáveis são palavras, números ou símbolos que possuem um valor, no seu caso a VARIÁVEL accountName possui o valor que é o Nome da Conta do Player, mas por que? Bem simples, quando você vai mexer no painel P para adicionar um player na acl, vc tem que digitar user.Nome da conta correto? No código você não esta adicionando nada, mas esta verificando se o player esta ali dentro então tem que pegar o nome da conta, entendeu? seu eu fizer isso: getAccountName(getPlayerAccount(thePlayer)) ou fizer isso: accountName = getAccountName(getPlayerAccount(thePlayer)) o resultado é o mesmo! Porém independente de qual forma seja, eu preciso pegar o nome da conta do player para a função isObjectInAcl. abaixo o código: function setPedAnimationSpeed(player,anim,speed) triggerClientEvent(player, "animSped", player, player,anim,speed) end function setCuffPlayer(player) setPedAnimation(player, nil) setPedAnimation(player,'ped', 'pass_Smoke_in_car', 0, true, true, true) setTimer(setPedAnimationSpeed,60,1,player, 'pass_Smoke_in_car', 0) local x, y, z = getElementPosition(player) local box = createObject(364, x, y, z) exports.bone_attach:attachElementToBone(box, player, 12, 0,0,0, 0,40,-10) setElementCollisionsEnabled(box, false) setElementData(player,'cuffOb', box) toggleControl(player, 'jump', false) setTimer(function(player) if getElementData(player,'cuff') and getElementData(player,'cuff') == true then toggleControl(player, 'fire', false) end end,60,0,player) toggleControl(player, 'crouch', false) end local corpACLS = { -- NOME DAS ACLS Q PODEM ALGEMAR UMA PESSOA! "BOPE", "PMRJ", } function cuff(hit,_,name) local player = getPlayerFromName(name) local x,y,z = getElementPosition(player) local x1,y1,z1 = getElementPosition(hit) if isPlayerPermission(hit) then -- FUNÇÃO UTIL, BASICAMENTE VERIFICA SE O POLICIAL (hit) ESTA DENTRO DE UMA DAS ACL'S BOPE OU PMRJ! if getDistanceBetweenPoints3D(x1,y1,z1,x,y,z) <= 20 then if not getElementData(player,'cuff') or getElementData(player,'cuff') ~= true then if isPedInVehicle(player) then setControlState(player,'enter_exit',true) setTimer(setCuffPlayer,2800,1,player) setElementData(player,'cuff', true) else setCuffPlayer(player) setElementData(player,'cuff', true) end outputChatBox(' '..getPlayerName(hit)..'#ff0000 Algemou você',player,255,255,255,true) else removeElementData(player,'cuff') destroyElement(getElementData(player,'cuffOb')) removeElementData(player, 'cuff') toggleControl(player, 'jump', true) toggleControl(player, 'crouch', true) toggleControl(player, 'fire', true) setPedAnimation(player, 'ped', 'pass_Smoke_in_car', 0, false, false, false, false) outputChatBox(' '..getPlayerName(hit)..'#008800 Soltou suas algemas',player,255,255,255,true) end else outputChatBox("Você está longe demais!",hit,255,0,0,true) end end -- end do if ifPlayerPermission then end addCommandHandler('algemar',cuff) addEventHandler('onPlayerQuit', root,function() if getElementData(source,'cuff') == true then destroyElement(getElementData(source,'cuffOb')) removeElementData(source, 'cuff') end end) addEventHandler('onPlayerWasted',root,function() if getElementData(source,'cuff') == true then destroyElement(getElementData(source,'cuffOb')) removeElementData(source, 'cuff') end end) addEventHandler('onVehicleStartEnter', getRootElement(), function(player, seat) if getElementData(player,'cuff') == true then if seat ~= 0 then destroyElement(getElementData(player,'cuffOb')) else cancelEvent() outputChatBox('Você não pode dirigir você tem algemas!',player,255,0,0) end end end) setTimer(function() for _,player in ipairs(getElementsByType("player")) do if getElementData(player,'cuff') == true then if isPedInWater(player) then setTimer(function(player) if isPedInWater(player) then killPed(player) end end,5000,1,player) end end end end,1000,0) addEventHandler('onVehicleExit', getRootElement(), function(player, seat) if getElementData(player,'cuff') == true then setCuffPlayer(player) end end) -- ABAIXO UMA FUNÇÃO UTIL QUE FOI DEMONSTRADA por @MainSCR no seu outro post, deveria ter usado isto em vez da outra! function isPlayerPermission(thePlayer) -- faz um loop das acls declaradas na tabela e verifica se a acl do jogador é uma das acls declarada na tabela if isElement(thePlayer) and getElementType(thePlayer) == "player" then if isGuestAccount(getPlayerAccount(thePlayer)) then return end for _, group in ipairs(corpACLS) do if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup(group)) then -- preste atenção acima, ("user."..Nome da Conta , qual a acl )) return true end end end return false end
  22. Observações: o seu código inicial @Rangel funciona! Mesmo tendo coisas sem sentidos como "comando" e "nick" em um addEventHandler e demais coisas, funciona sim! A unica coisa que não ocorre é o player poder destruir depois de ter saído do servidor! já o código do @Angelo Pereira é totalmente funcional e melhorado inclusive ( meus parabéns) Dito isso vamos lá, você tem 2 formas de fazer este Spawn de viaturas: Sistema 1 Para Criar a Vtr: local tableVehicle = {} local ACL = "BOMBEIROS" function spawnvtr ( mkr, dim ) if (dim) then -- verifica a dimensão if mkr == Spawn1 then -- verifica se a marker hitada é a de spawn. Se for então: local accName = getAccountName ( getPlayerAccount ( source ) ) -- pega a account do player if not isObjectInACLGroup ("user."..accName, aclGetGroup ( ACL) ) then -- se ele não for bombeiro ( não estiver na acl) então: outputChatBox("#FFFFFF| #E10000BOMBEIROS #FFFFFF| Somente #E10000BOMBEIROS #FFFFFFPodem Pegar Este Veiculo.", source,255,255,255, true) -- envia essa mensagem return -- termina a função, por precaução eu costumo fazer isto para evitar bug's! Poderia também usar um else no lugar do return! end -- se eu usar else, esse end aqui deveria ficar embaixo do warpPed! if tableVehicle[source] then -- se existir um valor na tableVehicle destroyElement ( tableVehicle[source] ) -- destroi oq esta na tableVehicle tableVehicle[source] = nil -- coloca tableVehicle como nil (anti-bug) end tableVehicle[source] = createVehicle(529, -2410.876, -600.848, 132.619, 0, 0, 270 ) -- cria o veículo e insere ele na tableVehicle setElementHealth (tableVehicle[source] , 200000) -- não entendi o porque de 200.000 de vida mas ok... warpPedIntoVehicle ( source, tableVehicle[source]) -- coloca o player dentro do veículo criado end end end addEventHandler("onPlayerMarkerHit", getRootElement(), spawnvtr) -- Obs: é de boa pratica sempre fazer as verificações negativas antes! Ex: -- Se o player não tiver isto ou não tiver aquilo então a função para de ser executada ou retorna! -- isto muitas das vezes evita bug :) Para destruir a Vtr: function destroyvtr ( mkr, dim ) if (dim) then if mkr == Destroy then local accName = getAccountName ( getPlayerAccount ( source ) ) if not isObjectInACLGroup ("user."..accName, aclGetGroup (ACL) ) then outputChatBox("#FFFFFF| #E10000BOMBEIROS #FFFFFF| Somente #E10000BOMBEIROS #FFFFFFPodem Destruir Este Veiculo.", source,255,255,255, true) return end if tableVehicle[source] then destroyElement (tableVehicle[source]) tableVehicle[source] = nil end end end end addEventHandler("onPlayerMarkerHit", getRootElement(), destroyvtr) Para quando o player sair do servidor: function onQuit() for _, player in ipairs(getElementsByType("player")) do -- faz um loop nos players online if tableVehicle[player] and isElement(tableVehicle[player]) then -- se o player possuia uma viatura antes de sair então: destroyElement (tableVehicle[player]) -- destroi a viatura tableVehicle[player] = nil end end end addEventHandler("onPlayerQuit", getRootElement(), onQuit) ______________________________________________________________________________________________________________________________________________________________________________________ Sistema 2 Para Criar a Vtr (mesmo código do outro sistema!): Obs: caso o player destrua a vtr, dará um erro no debug, mas nada grave! local tableVehicle = {} local ACL = "BOMBEIROS" function spawnvtr ( mkr, dim ) if (dim) then -- verifica a dimensão if mkr == Spawn1 then -- verifica se a marker hitada é a de spawn. Se for então: local accName = getAccountName ( getPlayerAccount ( source ) ) -- pega a account do player if not isObjectInACLGroup ("user."..accName, aclGetGroup (ACL) ) then -- se ele não for bombeiro ( não estivar na acl) então: outputChatBox("#FFFFFF| #E10000BOMBEIROS #FFFFFF| Somente #E10000BOMBEIROS #FFFFFFPodem Pegar Este Veiculo.", source,255,255,255, true) -- envia essa mensagem return -- termina a função, por precaução eu costumo fazer isto para evitar bug's! Poderia também usar um else no lugar do return! end -- se eu usar else, esse end aqui deveria ficar embaixo do warpPed! if tableVehicle[source] then -- se existir um valor na tableVehicle destroyElement ( tableVehicle[source] ) -- destroi oq esta na tableVehicle tableVehicle[source] = nil -- coloca tableVehicle como nil (anti-bug) end tableVehicle[source] = createVehicle(529, -2410.876, -600.848, 132.619, 0, 0, 270 ) -- cria o veículo e insere ele na tableVehicle setElementHealth (tableVehicle[source] , 200000) -- não entendi o porque de 200.000 de vida mas ok... warpPedIntoVehicle ( source, tableVehicle[source]) -- coloca o player dentro do veículo criado end end end addEventHandler("onPlayerMarkerHit", getRootElement(), spawnvtr) Para destruir a Vtr: function destruir(mkr, dim ) if (dim) then if mkr == Destroy then local accName = getAccountName ( getPlayerAccount ( source ) ) if not isObjectInACLGroup ("user."..accName, aclGetGroup (ACL) ) then outputChatBox("#FFFFFF| #E10000BOMBEIROS #FFFFFF| Somente #E10000BOMBEIROS #FFFFFFPodem Destruir Este Veiculo.", source,255,255,255, true) return end local vehicle = getPedOccupiedVehicle(source) -- retorna o veiculo que o player tá local modelo = getElementModel(vehicle) -- pega o modelo do veículo (id) local idViatura = {529, 429} -- tabela onde tem os id's que podem ser destruidos! for _, veiculo in ipairs(idViatura) do -- loop if (isElement(vehicle)) and (getElementType(vehicle)=="vehicle") and (modelo == veiculo) then -- se o que hitou a marker for um veículo e, o modelo(id) dele esta na tabela então: destroyElement (vehicle) -- destroi o veículo! end end end end end addEventHandler("onPlayerMarkerHit", getRootElement(), destruir) No sistema 2 não será necessário a parte do player sair do servidor pois qualquer pessoa que POSSUA a TAG, poderá destruir a viatura. Só para meio de conhecimento ainda há outras formas, uma delas é com o executeSQLQuery (database interna)! Caso tenha alguma duvida só pergunta! Obs: tenha certeza q a ACL "BOMBEIROS" esta criada, e que você esta nela!!