Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,991
  • Joined

  • Last visited

  • Days Won

    183

Everything posted by Lord Henry

  1. Utilize o botão <> para postar códigos. Não cole direto no texto. E na próxima vez, poste na seção correta de Programação em Lua.
  2. Ah, verdade. Faltou converter o id para número. Pois depois de comando ele é uma string.
  3. Adicione isso no script de prender, fora da função: function getPlayerByID (id) for i, player in ipairs (getElementsByType("player")) do if getElementData(player, "ID") == id then return player end end end E na função que vc quer que seja por ID, troque o getPlayerFromPartialName (name) por getPlayerByID (id). Não se esqueça de substituir o parâmetro de função name por id. function colocanavtr (police, _, id) if hasObjectPermissionTo (police, "function.Prender") then local preso = getPlayerByID (id) local px, py, pz = getElementPosition (police) local bx, by, bz = getElementPosition (preso) local dist = getDistanceBetweenPoints3D (px, py, pz, bx, by, bz) if not preso then return outputChatBox ("Jogador invalido.", police, 190, 190, 190, true) end if preso == police then return outputChatBox ("Você não pode prender a si mesmo.", police, 190, 190, 190, true) end if getPlayerWantedLevel (preso) == 0 then return outputChatBox ("Este jogador não está sendo procurado.", police, 190, 190, 190, true) end if getPedOccupiedVehicle (police) then return outputChatBox ("Você não pode prender de dentro da viatura.", police, 190, 190, 190, true) end if getPedOccupiedVehicle (preso) then return outputChatBox ("Você não pode prender um bandido enquanto ele estiver dentro de um veículo.", police, 190, 190, 190, true) end if dist >= 2 then return outputChatBox ("Você precisa chegar mais perto para prender.", police, 190, 190, 190, true) end setElementData (preso, "navtr", true) addEventHandler ("onPlayerCommand", preso, onCommand) local vtr = carros[police] setElementData (vtr, "compreso", true) attachElements (preso, vtr, 0.2, -1.5, 0, 0, 0, 90) setElementFrozen (preso, true) toggleAllControls (preso, false) takeAllWeapons (preso) setPedAnimation (preso, "ped", "CAR_dead_LHS") vrx, vry, vrz = getElementRotation (vtr) setElementRotation (preso, vrx, vry, vrz+83) warpPedIntoVehicle (police, vtr) outputChatBox ("Leve o preso para a delegacia mais próxima #00ffff(sirenes azuis).", police, 190, 190, 190, true) end end addCommandHandler ("prender", colocanavtr)
  4. Não use source como parâmetro de função. function MarkerVisible (prevAcc, currAcc) -- Parâmetros do evento onPlayerLogin, vc descobre isso lendo a Wiki dele. if not getAccountData (currAcc, "FirstTime") then setElementVisibleTo (MarkerTeste, source, true) -- Source também muda dependendo do evento. Neste caso source = jogador que logou. else setElementVisibleTo (MarkerTeste, source, false) end end addEventHandler ("onPlayerLogin", root, MarkerVisible)
  5. Linhas 17 e 18 são comentários. Coloque dois traços na frente dessas linhas. Ou nem coloque elas no script.
  6. Da próxima vez, utilize a formatação adequada do fórum.
  7. Faça a conexão ser global em vez de local e coloque ela junto do onResourceStart. Dessa forma: addEventHandler("onResourceStart", resourceRoot, function() sql = dbConnect( "sqlite", "MrxSQL.db" ) dbExec(sql, "CREATE TABLE IF NOT EXISTS dinheiroatm ( conta TEXT, quantidade INT )") for k, v in ipairs(getElementsByType("player")) do local accounts = getPlayerAccount ( v ) if not isGuestAccount(accounts) then local conta = getAccountName(accounts) local target = getPlayerFromAccountName(conta) local qh = dbQuery(sql, "SELECT quantidade FROM dinheiroatm WHERE conta=?", conta) local result = dbPoll(qh, -1) if #result ~= 0 then setElementData(target,"Mrx:moneyatm",result[1]["quantidade"]) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..conta.."', '0' )")) setElementData(target,"Mrx:moneyatm",0) end end end end ) addEventHandler("onPlayerLogin", root, function(_, theCurrentAccount) local conta = getAccountName(theCurrentAccount) local target = getPlayerFromAccountName(conta) if isElement(target) then local qh = dbQuery(sql, "SELECT * FROM dinheiroatm WHERE conta=?", conta) local result = dbPoll(qh, -1) if #result ~= 0 then setElementData(target,"Mrx:moneyatm",result[1]["quantidade"]) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..conta.."', '0' )")) setElementData(target,"Mrx:moneyatm",0) end end end ) addEventHandler("onPlayerQuit", root, function() local conta = getPlayerAccount(source) if not isGuestAccount(conta) then local qh = dbQuery(sql, "SELECT quantidade FROM dinheiroatm WHERE conta=?", getAccountName(conta)) local result = dbPoll(qh, -1) if #result ~= 0 then local money = getElementData(source,"Mrx:moneyatm") dbExec(sql, "UPDATE dinheiroatm SET quantidade=? WHERE conta=?", money, getAccountName(conta)) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..getAccountName(conta).."', 0 )")) end end end ) addEvent("Mrx:depositoatm", true) addEventHandler("Mrx:depositoatm", root, function (valor) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if not isGuestAccount(getPlayerAccount(source)) then if tonumber(getPlayerMoney(source)) >= valor then local money = getElementData(source,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money + valor) takePlayerMoney ( source, valor ) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para depositar.", source, 255, 0, 0,true) end end end ) addEvent("Mrx:saqueoatm", true) addEventHandler("Mrx:saqueoatm", root, function (valor) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if not isGuestAccount(getPlayerAccount(source)) then if tonumber(getElementData(source,"Mrx:moneyatm")) >= tonumber(valor) then local money = getElementData(source,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money - valor) givePlayerMoney(source, valor) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para sacar.", source, 255, 0, 0,true) end end end ) addEvent("Mrx:transfere", true) addEventHandler("Mrx:transfere", root, function (valor, name) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if name then target = getPlayerFromPartialName(name) if target == false or target == nil then outputChatBox("#7cc576[BANCO]#FFFFFF Jogador não localizado.", source, 255, 255, 255, true) return end if not isGuestAccount(getPlayerAccount(source)) then if (source) ~= (target) then if tonumber(getElementData(source,"Mrx:moneyatm")) >= (valor) then local money = getElementData(source,"Mrx:moneyatm") or 0 local quant = getElementData(target,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money - valor) setElementData(target, "Mrx:moneyatm", quant + valor) outputChatBox("#7cc576[BANCO]#FFFFFF O jogador "..getPlayerName(source).."#FFFFFF transferiu para sua conta $"..convertNumber(valor)..".", target, 255, 255, 255, true) outputChatBox("#7cc576[BANCO]#FFFFFF Você transferiu $"..convertNumber(valor).."#FFFFFF para a conta do jogador "..getPlayerName(target).."#FFFFFF.", source, 255, 255, 255, true) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para transferir.", source, 255, 0, 0,true) end end end end end ) function convertNumber ( number ) local formatted = number while true do formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') if ( k==0 ) then break end end return formatted end addEventHandler("onPlayerLogout", root, function() setElementData(source,"Mrx:moneyatm",0) end ) 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 function getPlayerFromAccountName(name) local acc = getAccount (name) if name and acc and not isGuestAccount (acc) then return getAccountPlayer (acc) else return false end end
  8. Já depurou o código pra ver se ele está lendo tudo?
  9. Troque todos os sources por thePlayer. Não se usa source como parâmetro de função. E remova aqueles else
  10. Atualize essa aba com F5. Eu coloquei o código depois.
  11. Eu deixaria do jeito que está, utilizando todos os parâmetros.
  12. Não use variáveis nesse caso. addEventHandler ("onClientRender", root, function() dxDrawImage (screenW * 0.6332, screenH * 0.0729, screenW * 0.1881, screenH * 0.1068, "images/vida2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.6523, screenH * 0.1146, screenW * 0.0220, screenH * 0.0313, "images/comida.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.7035, screenH * 0.1159, screenW * 0.0220, screenH * 0.0299, "images/sede.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.7577, screenH * 0.1159, screenW * 0.0220, screenH * 0.0299, "images/sono.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText (getElementData (localPlayer, "Fome").."", screenW * 0.6772, screenH * 0.1172, screenW * 0.6991, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) dxDrawText (getElementData (localPlayer, "Sede").."", screenW * 0.7255, screenH * 0.1172, screenW * 0.7474, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) dxDrawText (getElementData (localPlayer, "Sono").."", screenW * 0.7826, screenH * 0.1172, screenW * 0.8045, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) end)
  13. detran = { -- x, y, z, ocupado, colShape [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script. [2] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei. } for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. end Obs: Para poder ver colShapes precisa usar /showcol (comando só funciona em Modo Desenvolvedor).
  14. Claro que dá. Você tem uma table com todas as coordenadas das vagas, certo? Passa um loop nas vagas criando um colShape em cada uma das coordenadas. Recomendo o createColSphere, pois não precisa determinar coordenadas e tamanhos dos lados, apenas seu raio (que vc pode usar um valor fixo para todas)
  15. Sim, caso o jogador for lá e buscar o veículo manualmente, o problema da vaga vai continuar. Dai que entra o esquema do colShape. Que detecta quando um elemento sai de dentro dele.
  16. Cara, já falei. Esse negócio de comando é só no MEU CASO pois eu não tenho o painel. Esqueça o uso de comandos.
  17. Pois é, mas em todos os casos ocorre o teleporte. Quando o carro vai pro DETRAN. Quando o carro vai pro jogador. Quando o jogador vai pro DETRAN.
  18. Ou você poderia tornar os locais de DETRAN inacessíveis pelos jogadores. De forma que não tem como entrar nos veículos que estão lá. Ou então você simplesmente freeza e tranca todos os veículos quando eles são mandados ao DETRAN. Destrancando-os e descongelando-os somente quando o jogador pegar ele pelo painel. Dai o jogador é obrigado a puxar o carro pelo painel. (dai vc muda o sistema que em vez de teleportar o jogador pra lá, teleporta o carro pro jogador)
  19. Sim. No seu caso seria o painel que iria liberar a vaga. Mas se o cara for lá manualmente buscar o carro (como eu fiz) sem usar comando nenhum. Dai a vaga vai continuar sendo considerada ocupada pelo script. É por isso que depois de ocupar as vagas, quando você tenta enviar outro veículo, não acontece nada. Pois ele não encontrou vaga livre. Lembra o que eu perguntei pra você lá no começo do tópico?
  20. Como eu disse no vídeo, eu fiz por comando pois eu não tenho o painel. A questão do comando é apenas para simular mais ou menos os dados que o painel iria enviar pro servidor. O objetivo final não é pra ser com comando mesmo.
  21. Não respondeu minha primeira pergunta.
  22. SetElementRotation não é como o moveObject. Ele não vai rotacionar 90º, ele vai ficar no ângulo de 90º em relação ao mundo. Isto é, ele vai ficar apontado para Oeste. Você está setando interior, dimensão, posição e rotação ao mesmo tempo. Experimente colocar a rotação em um pequeno timer. setTimer (setElementRotation, 100, 1, liberado, 0, 0, 90)
×
×
  • Create New...