Jump to content

HiroShi

Members
  • Posts

    73
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by HiroShi

  1. Primeiro devemos corrigir muitos erros. Não se usa 'source' como parametro definido, isso é um erro absurdo que acontece direto na comundiade Brasileira, veja Quando e como deve usar source. Outra coisa é. O fato de você ter usado a nome do player invés de usar a conta dele, a função isObjectInACLGroup exige a conta do player, e não nome. E não tem porquê usar aquele return no outputChatBox. Aqui está o código corrigido e funcionando: function Anonimo(p, cmd, ...) local anonimo = table.concat({ ... }, " ") local nome = getPlayerName(p) conta = getAccountName( getPlayerAccount (p)) for _,v in ipairs(getElementsByType("player")) do if isObjectInACLGroup("user."..conta, aclGetGroup("Staff")) then outputChatBox("#000000[ Anonimo ] #FFFFFF "..nome.." #FFFFFF: #FFFFFF"..anonimo,v, 255, 255, 255, true) else outputChatBox("#000000[ Anonimo ] #FFFFFF"..anonimo,v, 255, 255, 255, true) end end end addCommandHandler("anonimo", Anonimo)
  2. function showTime (TimeType) local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end if TimeType == 'horas' then return hours elseif TimeType == 'minutos' then return minutes elseif TimeType == 'segundos' then return minutes end end bote isso !
  3. tente assim: --https://forum.multitheftauto.com/forum/127-programação-em-lua/page/2/ function showtime (TimeType) local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end if TimeType == 'horas' then return hours elseif TimeType == 'minutos' then return minutes elseif TimeType == 'segundos' then return minutes end end function ptriniciar(thePlayer, cmd, state) local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Policial" ) ) then if (state == "iniciar" or state == "finalizar") then -- Verifica se o comando é seguido por um parâmetro válido. local nameOfPerson = getPlayerName (thePlayer) -- Obtém o nick de quem executou o comando. if (fileExists ("logPTR.txt")) then -- Se já existe um arquivo de texto com este nome neste resource, então: newFile = fileOpen ("logPTR.txt") -- Abre o arquivo para poder editá-lo. fileSetPos (newFile, fileGetSize (newFile)) -- Coloca o cursor de escrita no fim do arquivo, caso contrário ele vai começar a escrever no começo dele, antes do que já estiver escrito no arquivo. if (state == "iniciar") then -- Se o parâmetro que o jogador usou após o comando foi "iniciar" então: outputChatBox ("Patrulha iniciada.", thePlayer) -- Apenas pra saber q o comando funcionou, normalmente teria as verificações antes de permissões e se já está em patrulha. fileWrite (newFile, "["..showTime('horas')..":"..showTime('minutos').."] "..nameOfPerson.." Iniciou sua patrulha.\n") -- Escreve isso no documento. O \n pula para a linha seguinte após a mensagem. elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..showTime('horas')..":"..showTime('minutos').."] "..nameOfPerson.." Finalizou sua patrulha.\n") end fileClose (newFile) -- Para todo fileOpen ou fileCreate, é necessário um fileClose pois enquanto arquivos estiverem abertos, eles podem ser corrompidos e os dados serão perdidos. else -- Se o arquivo ainda não existe, então: newFile = fileCreate ("logPTR.txt") -- Cria o arquivo de texto dentro deste resource e abre ele. (se já existisse um arquivo com esse nome, substituiria por um novo em branco) if (newFile) then -- Se conseguiu criar o arquivo, então: (as vezes pode dar erro de permissão no servidor, então use isso para evitar erros.) fileSetPos (newFile, fileGetSize (newFile)) if (state == "iniciar") then outputChatBox ("Patrulha iniciada.", thePlayer) fileWrite (newFile, "["..showTime('horas')..":"..showTime('minutos').."] "..nameOfPerson.." Iniciou sua patrulha.\n") elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..showTime('horas')..":"..showTime('minutos').."] "..nameOfPerson.." Finalizou sua patrulha.\n") end fileClose (newFile) else -- Se não conseguiu criar o arquivo, então: debug ("ERRO: Impossivel criar arquivo 'logPTR.txt' no servidor.") end end else -- Se não usou nenhum parâmetro após o comando ou então usou um parâmetro incorreto, então: outputChatBox ("Sintaxe: /ptr <iniciar / finalizar>", thePlayer, 255, 255, 0) end end end addCommandHandler("ptr", ptriniciar)
  4. bote a 'local horario = showTime', abaixo da função !!
  5. você pode aplicar o shader usando um image png sem nada 2x2, ou ent trocar a txd pela imagem !
  6. Então amigo procure no seu script de spawn a function 'spawnPlayer', se vc achar me manda essa linha pfv !
  7. use o evento onElementDestroy para isso. ex: addEventHandler("onElementDestroy", getRootElement(), function () if getElementType(source) == "vehicle" then local occupant = getVehicleOccupant(source, 0) if (occupant) then local data2 = dbPoll(dbQuery(db, "SELECT * FROM Veiculos WHERE Conta = ?", getAccountName(getPlayerAccount(occupant))), -1) for i, data in ipairs (data2) do local IDDoDono = getElementData(occupant, "ID") if not IDDoDono then return end local VeiculoIDDoDono = ProcurarVeiculosNoJogo(IDDoDono) if VeiculoIDDoDono then destroyElement(VeiculoIDDoDono) end if VeiculoAluguel[occupant] then destroyElement(VeiculoAluguel[occupant]) end dbExec(db, "UPDATE Veiculos SET Status = ? WHERE Conta = ? AND Status = ?", "Guardado", getAccountName(getPlayerAccount(occupant)), "Spawnado") end end end end)
  8. Esse código está com uma logíca muito mal elaborada, invés de vc criar 4 variaveis, você poderia criar apenas 1, e invés de 4 functions vc precisiraria criar apenas 1. Então vms lá, vou transformar somente em 1 variavel e 1 função. aba = 1 -- variavel que define as abas clickPostions = { -- cordenada de cada botão { }, --bote aqui o cordenada do botão 1. {22, 288, 181, 53}, {20, 350, 165, 58}, {25, 418, 242, 56}, } addEventHandler ("onClientClick", root, function(_, s) if (painellobby) == true and (s) == 'down' then for i,v in ipairs(clickPostions) do if isCursorOnElement (x*v[1], y*v[2], x*v[3], y*v[4]) then aba = i end end end end) lembrando que deverá fazer umas alteraçoes no seu onClientRender
  9. ent amigo, vi que seu script é client-side pelo fato de ultilizar o parametro definido: localPlayer. O script não está funcionando pelo fato de você usar: isObjectInACLGroup e Também getPlayerAccount essas duas funções são em server-side. Como você está ultilizando addCommandHandler, você pode fazer em server-side. então faça assim: addCommandHandler("revistar", function(p, cmd, target) local accountname = getAccountName (getPlayerAccount(localPlayer)) if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Policial" ) ) then if target then local targetPlayer = getPlayerFromID(target) if (targetPlayer) then local x, y, z = getElementPosition(p) local tX, tY, tZ = getElementPosition(target) if getDistanceBetweenPoints3D (x,y,z,tX,tY,tZ) < 20 then -- aqui você define a distancia entre vc e o player openInventory(targetPlayer) else outputChatBox("[ERROR] #4169E1Chegue mais perto do abordado. !!", 255, 255, 255, true) end else outputChatBox("[ERROR] #4169E1Esse não está na cidade !!", 255, 255, 255, true) end else outputChatBox("#4169E1[Use]#FFFFFF /revistar [ID]", 255, 255, 255, true) end end end) function getPlayerFromID(ID) for i,v in ipairs(getElementsByType('player')) do if getElementData(v, 'ID') == tonumber(ID) then return v end end end
  10. Você usará createEffect, e tem tbm a listas do nome dos efeitos para você usar no create effect: Effects
  11. Você esqueceu de aplicar uma concatenação antes do uso da variavel name ' .. ' no caso você deve botar a linha assim: fileWrite (newFile, "["..horario.."] "..name.." Iniciou sua patrulha.\n")
  12. alir em ' state == "down" ', coloque 'both' --> ' state == "down" '. Na wiki fala sobre o evento: 'onClientClick'
  13. você fará um comando usando addCommandHandler, você pode verificar quem é staff usando um loop de todos os players e verificar quem é staff através da função isObjectInACLGroup. espero ter lhe ajudado <3.
  14. é só vc subsituir a textura da parte do corpo por uma image 2x2 em png sem nada nela
  15. É shader amigo, basicamente você pegar uma imagem e irá mascarar a textura dela com a imagem entende ?. para isso você usará: dxCreateShader dxCreateTexture engineApplyShaderToWorldTexture dxSetShaderValue. der uma estudada nessas functions e entederá ! https://www.sendspace.com/file/bjwoqp -- aqui você baixa o shader. espero te ajudado
  16. tenta usar: dxCreateTexture(tocolor(255, 255, 255, 255))
  17. ss local distanciaMaxima = 5 function getPlayerID(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 function playerHasItem(player, itemID) for i, v in pairs(getElementData(player, 'TS:InventarioInfo')) do if type(v) == 'table' then if v['Item'] == tonumber(itemID) then return true end end end return false end function returnQntdItem(player, itemID) if (player) then for i, v in pairs(getElementData(player, "TS:InventarioInfo")) do if (type(v) == "table") then if (v['Item'] == tonumber(itemID)) then return v['Quantidade'] end end end end return false end function verificarDistancia(player, abordado) if player and abordado then local x,y,z = getElementPosition(player) local x2,y2,z2 = getElementPosition(abordado) local distancia = getDistanceBetweenPoints3D(x,y,z,x2,y2,z2) if distancia then return distancia end end end itemsTable = { -- item id, item name {10, 'Bandages'}, {11, 'Kits reparos'}, {12, 'Maconhas'}, {13, 'Armamentos de AK-47'}, {14, 'Munições de 762'}, {15, 'Munições de FALL'}, {16, 'Munições de 762'}, {17, 'Armamento de MP5'}, {18, 'Armamento de 9mm'}, {19, 'Armamento de TEC-9'}, {20, 'Armamento de Uzi'}, {21, 'Armamento de REVOLVER-38'}, {22, 'Armamento de GLOCK'}, {23, 'Armamento de 45'}, {24, 'Facas'}, {25, 'Armamentos de AK-47-VIP'}, {26, 'Armamentos de AWP'}, {27, 'Munições de Sniper'}, {28, 'Armamentos de AWP-VIP'}, {30, 'Coletes'}, {31, 'de Dinheiro Sujo'}, {32, 'Galoes de gasolina'}, {33, 'Lockpicks'}, } function revistar(source, commandName, id) if (id) then local playerID = tonumber(id) if (playerID) then local targetPlayer, targetPlayerName = getPlayerID(playerID) if (targetPlayer) then if verificarDistancia(source, targetPlayer) > 5 then return outputChatBox("#0037FF✘#ffffffERROR#0037FF✘➺ #ffffff Chegue mais perto do abordado!",source,255,0,0,true) end for i,v in ipairs( itemsTable ) do local item = returnQntdItem(source, v[1]) if playerHasItem(targetPlayer, v[1]) == true then outputChatBox("#0037FF✘#ffffffINFO#0037FF✘➺ #ffffff O Cidadão tem "..item.." "..v[2].." em sua mochila!",source,255,0,0,true) return end end end end end end addCommandHandler("revistar", revistar) Está aí amigo. Mas uma dica, melhore esse código, não tem necessidade fazer esse tanto de function sendo que dar para fazer em apenas 1, e outra dica é aprender a mexer com tabelas !. Espero te lhe ajudado.
  18. Olá pessoal, hoje vamos falar de algo que destrói a cabeça de novatos no MTA: Quando e onde devo usar source? Então vamos a primeira pergunta que surge, mas o que diabos é source no MTA? source nada mais é do que: parâmetro determinado por uma função ou evento. Você agora você deve estar perguntando o que é parâmetro. É muito simples, pense comigo na função addCommandHandler. Ela tem 2 parâmetros predeterminados que são (Quem_Executou, Nome_Do_Comando), como na imagem abaixo: Como você pode ver na imagem, ela tem os 2 parâmetros citados acima. Lembrando que: a própria wiki fala sobre os parâmetros. playerSource: O jogador que acionou o comando ou o console do servidor. Se não for acionado por um jogador (por exemplo, por administrador) ou console de servidor, isso será falso. commandName: O nome do comando que foi acionado. Isso é útil se vários comandos passarem por uma mesma função. Mesmo o parâmetro sendo predeterminado, você pode botar o nome que você quiser, por ex: O parâmetro de quem executou o comando é playerSource, mas você pode botar qualquer nome como: p, player, sujeito, shuppinga e etc.... da mesma maneira o commandName (nome do comando), você pode botar (nome_do_comando, comando). Como você prefere. (mas é claro, siga um padrão a qual os outros programadores possam entender seu código !!) _____________________________________________________________ Mas quando devo usar source então? Simples, quando não existe o parâmetro que indique o sujeito. Por exemplo, o evento onPlayerWasted. O evento onPlayerWasted tem o seguintes parâmetros: totalAmmo - A munição total que a vitima tinha quando morreu, killer - O assassino que matou a vitima, killerWeapon - O id da arma do assassino, bodyPart - A parte do corpo da vítima que foi atingida quando ela morreu, stealth - Um valor booleano representando se esta foi ou não uma morte furtiva. Note que não existe o parâmetro vítima. Então aqui que entra o source. Mas como saber o que é o source? A própria wiki diz, basta ler A source deste evento é o jogador que morreu ou foi morto. Então o tutorial fica por aqui :), bye bye. (lembrando que essas fontes são próprias, então pode ser um conteúdo incorreto, mas espero ter ajudado a tirar a dúvida, lembrando que ela pode ser corrigida por alguém de bom conhecimento sobre do conteúdo.)
  19. Recomendo fazer um tabela com os itenss, e fazer um scroll só que na horizontal e automático.
×
×
  • Create New...