Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,010
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Prender objeto a outro objeto: attachElements Prender objeto a um jogador: funções exportadas pelo resource Bone_Attach.
  2. commands = { -- Lista de comandos. ["coco"] = {} -- Lista de timers que bloqueiam este comando em um jogador específico. } addEventHandler ("onPlayerCommand", root, function (cmd) if (commands[cmd]) then -- Se o comando executado existe na lista de bloqueios, então: if (isTimer (commands[cmd][source])) then -- Se o jogador que executou este comando está com ele bloqueado (existe o timer), então: outputChatBox ("Este comando está desativado para você.", source, 255, 0, 0) cancelEvent() else -- Se não existe o setTimer deste jogador neste comando, significa que o comando não está bloqueado, então: commands[cmd][source] = setTimer (function (theSource) -- Adiciona este timer na lista, depois de 1 minuto ele vai sumir da lista e o jogador poderá usar o comando novamente. commands[cmd][theSource] = nil -- source não existe dentro de uma função setTimer, por isso precisou ser passado via parâmetro. end, 60000, 1, source) outputChatBox ("Comando executado.", source, 0, 255, 0) end end end) addEventHandler ("onPlayerQuit", root, function () -- Ativa quando um jogador desconecta do servidor. for i, v in pairs (commands) do -- Para cada comando da lista, faça: if (isTimer (v[source])) then -- Se existe o timer do jogador que saiu neste comando, então: killTimer (v[source]) -- Cancela o timer. v[source] = nil -- Libera a variável do timer. end end end) Testado e funcionando. (server-side)
  3. function math.round(number, decimals, method) decimals = decimals or 0 local factor = 10 ^ decimals if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor else return tonumber(("%."..decimals.."f"):format(number)) end end ratio = 3.524923 -- Valor qualquer só pra testar. function qualquerCoisa (cmd) outputChatBox (math.round (ratio, 3, "floor"), 255, 255, 0) -- Manda no chat o número com somente 3 decimais. end addCommandHandler ("ratio", qualquerCoisa) Client-side
  4. Postou na seção errada (tutoriais em geral). Dúvidas sobre mapas você posta na seção Mapas para MTA:SA Tópico movido para a seção correta.
  5. Mas qual a sua dúvida em si? Vc está com problemas em calcular a conversão ou apenas em criar um campo de input em DX? Seria útil mostrar o código do seu painel para que possamos lhe ajudar. Eita rapaz, o Tommy ta me seguindo logo abaixo. \/
  6. Habilite todos esses: [Enabled SD: 12,14,15,16,20,31,32,33]
  7. Você deveria comentar cada linha do seu código para saber o que está fazendo em cada uma. Algumas partes parecem estar com falha na lógica. Sobre o jogador voltar ao time antigo, vc precisa salvar um elementData nele quando ele usa o comando pra ir pro PVP, salvando o time antigo nessa data e depois setando o jogador de volta no time salvo na data dele. Um salve pro Tommy, que está digitando logo abaixo. \/
  8. Quais SD vc tem habilitados no seu servidor? (quando vc conecta no servidor, é a 3 ou 4 linha que aparece no F8)
  9. Nome de usuário é inútil nesses casos. Você precisa do serial dele, juntamente com as provas do ataque e fazer uma denúncia diretamente a algum admin do MTA via mensagem privada aqui no fórum. Mas já vou logo avisando que é difícil deles banirem, pois a maioria dos casos é culpa do dono do servidor que não soube configurar uma proteção adequada.
  10. Deixe um Thanks nas respostas que lhe ajudaram.
  11. A questão do motor ligar e desblindar vc coloca no script de reparar.
  12. createPed onClientPedDamage triggerServerEvent addEvent addEventHandler getPlayerWantedLevel setPlayerWantedLevel
  13. Recuperar apenas a vida do veículo, mas manter os amassados: setElementHealth (theVehicle, 1000) Reparar totalmente o veículo, deixando-o novo: fixVehicle (theVehicle) Ligar o motor do veículo: setVehicleEngineState (theVehicle, true)
  14. Movido para a seção Offtopic por se tratar de recrutamento de Staffs para servidor.
  15. client-side function onChatMessage (text) if (text == "login: You successfully logged in") then -- Se a mensagem hardcoded for igual a esta, então: cancelEvent() -- Cancela essa mensagem. outputChatBox ("login: Você logou com sucesso.", 255, 170, 0) -- Envia isso no lugar dela. end end addEventHandler ("onClientChatMessage", root, onChatMessage)
  16. Ou então você removeu o resource Admin da ACL Group Admin. Dessa forma o painel Admin não tem mais permissão para nada.
  17. Ué. Só criar 4 variáveis, 2 delas pra posição sem o radar e as outras 2 pra posição com o radar. Quando estiver dentro do veículo, faz o dxDraw da HUD com as variáveis com o radar, caso contrário, desenha a HUD com as variáveis sem o radar. Pra otimizar, eu faria as variáveis dentro de uma table. local positions = { [1] = {screenX*0.01, screenY*0.08}, -- Posição sem o radar. [2] = {screenX*0.01, screenY*0.06} -- Posição com o radar. } function render () if (getPedOccupiedVehicle(localPlayer)) then -- Se o jogador está dentro de um veículo, então: dxDrawRectangle (positions[2][1], positions[2][2], 200, 100) -- dxDraw com as posições do segundo item da table. else -- Se o jogador está a pé, então: dxDrawRectangle (positions[1][1], positions[1][2], 200, 100) -- dxDraw com as posições do primeiro item da table. end end (Programado e postado via mobile)
  18. getVehicleController - Obtém quem está dirigindo o veículo. getVehicleOccupant - Obtém o jogador que está ocupando determinado assento do veículo.
  19. Adicione também o "onPlayerLogout"
  20. O MTA Server usa mais memoria RAM do que processador. E o nome daquele "prompt de comando preto" é Server Console.
  21. processLineOfSight é meio bugado, além de ser pesado. Você pode verificar a posição do clique e compará-lo com a posição do porta-malas. Se clicou perto da posição do porta-malas, então considera como clicou no porta-malas. function fClientClick (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if (button == "left") and (state == "up") then if not getPedOccupiedVehicle(localPlayer) and isElement(clickedElement) and getElementType(clickedElement) == "vehicle" then -- if getElementData(clickedElement, "Owner") == localPlayer then local cx, cy, cz = getVehicleComponentPosition(clickedElement, "boot_dummy", "world") -- Obtém a posição do porta-malas if (math.abs(cx - worldX) <= 1) and (math.abs(cy - worldY) <= 1) and (math.abs(cz - worldZ) <= 1) then -- Se a diferença entre a posição clicada e a posição do porta-malas for menor que 1 (clicou perto), então: print("Clicou no porta-malas!") else print("Não clicou no porta-malas.") end if (boot) then destroyElement (boot) end if (target) then destroyElement (target) end boot = createMarker (cx, cy, cz, "corona", 0.1) -- Somente para testes. Marca a posição do porta-malas em azul. target = createMarker (worldX, worldY, worldZ, "corona", 0.1, 255, 0, 0, 255) -- Somente para testes. Marca a posição clicada em vermelho. -- if not guiGetVisible(weaponWindow) then -- guiSetVisible(weaponWindow, true) -- triggerServerEvent("RefreshListWeapons", resourceRoot, getElementModel(clickedElement)) -- triggerServerEvent("OpenVehicleTrunk", resourceRoot, clickedElement, true) -- end -- vehicleClicked = clickedElement -- end end end end addEventHandler ("onClientClick", root, fClientClick) Se você quer que ele aceite cliques mais precisos, vc pode diminuir aqueles 1 da condição. Quanto menor o valor, mais perto do porta-malas precisa ser o clique para ser considerado no porta-malas.
  22. De nada, deixe um Thanks no comentário que lhe ajudou.
  23. Ah, perdão pelo vacilo. Corrigido.
  24. Merry Christmas and happy holidays everyone. Feliz natal e feliz fim de ano para todos. E um salve pros BRs ?
  25. function chePlayergr(player,x,y,z,baseName) cheTimer = setTimer(function(player,baseName) if isElement(player) and getElementType(player) == "player" and baseName then if not((checkPlayerPermission(player,"A08") and getElementData(player,"Group") == getGroupNameFromBaseName(baseName)) or isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup("Admin"))) then if isTimer(cheTimer) then killTimer(cheTimer) end setElementPosition(player,x,y,z+1) outputChatBox("Você não tem mais acesso a Base!",player,255,255,255,true) end else killTimer(cheTimer) end end, 2000, 0, player, baseName) end Já vou logo adiantando que vai dar uma série de problemas por usar setTimer server-side e sem indexar no jogador. Outros jogadores causarão conflito neste setTimer.
×
×
  • Create New...