Jump to content

androksi

Other Languages Moderators
  • Posts

    545
  • Joined

  • Last visited

  • Days Won

    38

Everything posted by androksi

  1. Apenas uma correção no título: [título] e obter a mensagem. Desculpe-me pelo erro, mas para concluir, é necessário ter a mensagem/feedback do resource. O puzzle é simples, não quis fazer algo complexo (ainda).
  2. Olá. Como este subfórum está um pouco parado, resolvi criar um mini-puzzle para que possamos, ao menos, movimentar um pouquinho. O desafio é o seguinte: Há um resource para você baixar e tentar iniciá-lo em seu servidor de testes (não faça isso em servidor com jogadores, pois mostrará mensagens). Dentro desse resource, há 3 arquivos, sendo eles: meta.xml __checker.luac puzzle.Lua O __checker.luac está compilado para manter o puzzle em segredo, não se preocupe. Enfim, o que você deve fazer é tentar iniciar o resource. Quando você finalmente conseguir, aparecerá um feedback com algumas mensagens e um código. Siga estritamente o que é para ser feito. Todos que completarem e seguirem as mensagens do feedback, receberá um Thanks. Link do resource: https://drive.google.com/open?id=14m2Kdfxz8YTCs2THxoh4aTJtb-vK7JQW Obs.: só será validado se o conteúdo da mensagem for exatamente o mesmo do feedback.
  3. Do que você tá falando, @#RooTs? Olha bem o código desse resource que foi postado. Acha mesmo que os três programadores experientes que você citou, iriam fazer algo daquele jeito? ?
  4. local screenW, screenH = guiGetScreenSize() function draw() dxDrawImage((screenW - 400) / 2, (screenH - 200) / 2, 100, 100, "img/arrow.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage((screenW + 200) / 2, (screenH - 200) / 2, 100, 100, "img/arrow.png", 180, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage((screenW - 100) / 2, (screenH + 200) / 2, 100, 100, "img/scissors.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end function barbershop(status) if not type(status) == "boolean" then return false end if status == true then addEventHandler("onClientRender", root, draw) elseif status == false then removeEventHandler("onClientRender", root, draw) end end addEvent( "showPanel", true ) addEventHandler( "showPanel", localPlayer, barbershop) Não crie variáveis para funções de renderização (dxDrawImage, dxDrawRectangle, dxDrawText etc). Elas devem ficar dentro de um bloco de função, sendo assim, basta, depois, adicionar ou remover o evento onClientRender nesta função, que no caso acima é a draw.
  5. Tente isso: -- client-side local controlTable = {"fire", "next_weapon", "previous_weapon", "forwards", "backwards", "left", "right", "zoom_in", "zoom_out", "change_camera", "jump", "sprint", "look_behind", "crouch", "action", "walk", "aim_weapon", "conversation_yes", "conversation_no", "group_control_forwards", "group_control_back", "enter_exit", "vehicle_fire", "vehicle_secondary_fire", "vehicle_left", "vehicle_right", "steer_forward", "steer_back", "accelerate", "brake_reverse", "radio_next", "radio_previous", "radio_user_track_skip", "horn", "sub_mission", "handbrake", "vehicle_look_left", "vehicle_look_right", "vehicle_look_behind", "vehicle_mouse_look", "special_control_left", "special_control_right", "special_control_down", "special_control_up"} function getBoundControls(key) -- Função útil da Wiki (https://wiki.multitheftauto.com/wiki/GetBoundControls) local controls = {} for _, control in ipairs(controlTable) do for k in pairs(getBoundKeys(control)) do if (k == key) then controls[control] = true end end end return controls end function kick() triggerServerEvent("anticheat->kick", resourceRoot) end addEventHandler("onClientResourceStart", resourceRoot, function() if getBoundControls("space")["crouch"] and getBoundControls("space")["fire"] then kick() end end ) addEventHandler("onClientPlayerWeaponFire", root, function() if source == localPlayer then if getBoundControls("space")["crouch"] and getBoundControls("space")["fire"] then kick() end end end ) -- server-side addEvent("anticheat->kick", true) addEventHandler("anticheat->kick", resourceRoot, function() kickPlayer(client, "Console", "Retire suas binds.") end )
  6. elseif isObjectInACLGroup("user." .. account, aclGetGroup("Everyone")) then cancelEvent(true) outputChatBox("#000000║#ffffff✘ #ff0000Jᴏ#ffff00ɢᴀᴅ#00ff00ᴏʀ#ffffff ✘#000000║ - #FFFFFF"..name.."#FFFFFf:#FFFFFF "..text, root, 255, 255, 255, true) outputServerLog("CHAT: [ Jogador ] " .. name .. ": " .. text) Essa parte toda do Everyone deve ser a última. Isso é erro de lógica. Uma vez que Everyone são TODOS os jogadores, assim que o jogador entra ali, nada mais é executado a partir do Alpha.
  7. local vehicles = {} local minutes = 10 -- Depois de N minutos, o veículo será destruído. function removeVehicle(vehicle) if isElement(vehicle) then destroyElement(vehicle) vehicles[vehicle] = nil end end function startTimer(vehicle) if not vehicles[vehicle] then vehicles[vehicle] = setTimer(removeVehicle, minutes * 60000, 1, vehicle) end end function stopTimer(vehicle) if vehicles[vehicle] and isTimer(vehicles[vehicle]) then killTimer(vehicles[vehicle]) vehicles[vehicle] = nil end end addEventHandler("onVehicleEnter", root, function(_, SEAT) if SEAT == 0 then stopTimer(source) end end ) addEventHandler("onVehicleExit", root, function(_, SEAT) if SEAT == 0 then startTimer(source) end end ) Você pode usar o meu código acima. Quando o jogador sai de algum veículo, começa uma contagem de 10 minutos (você pode alterar o tempo). Se ninguém entrar no veículo em 10 minutos, o carro será destruído.
  8. Sim, precisa de script para isso. Meio complicado responder a sua pergunta "Se sim, qual?". Infelizmente, você terá de criar seu próprio sistema de buzinas e sirenes. Até onde eu sei, esse sistema ainda não existe gratuitamente na Internet.
  9. /cv não é um comando de atalho do MTA. Isso é do resource freeroam. (assim como /st, /sw, /rp, /flip, /au etc) Caso você queira saber os comandos nativos do MTA, aqui estão os links: CLIENT - https://wiki.multitheftauto.com/wiki/Client_Commands SERVER - https://wiki.multitheftauto.com/wiki/Server_Commands
  10. Troque: addEventHandler("onClientGUIClick", botao1, fecharConversa) por: addEventHandler("onClientGUIClick", botao1, fecharConversa, false) O false no final do evento, no quarto (4º argumento) é importante para que o evento não seja acessível em todas as áreas da janela utilizada. Sendo assim, quando false, o evento irá se aplicar apenas no elemento que você definiu no 2º argumento, neste caso o 'botão1'.
  11. Cadê a parte em que a função do click está sendo executada?
  12. -- // Client-side \\ -- MAX_PACKET_LOSS = 10 -- // % INTERVAL = getTickCount() + 5000 -- // Irá verificar de 5 em 5 segundos GO_TO_HELL = false addEventHandler('onClientRender', root, function() if INTERVAL < getTickCount() and GO_TO_HELL == false then local packetLoss = getNetworkStats()['packetlossLastSecond'] if packetLoss > MAX_PACKET_LOSS then triggerServerEvent('onPlayerGoingToHell', resourceRoot, packetLoss) GO_TO_HELL = true end INTERVAL = getTickCount() + 5000 end end ) -- // Server-side \\ -- addEvent('onPlayerGoingToHell', true) addEventHandler('onPlayerGoingToHell', resourceRoot, function(pl) kickPlayer(client, 'Console', 'Conexão horrível com a Internet. (Packet Loss: ' .. (pl or 0) .. '%') end ) Não testei, mas deve funcionar. Se o packet loss do jogador estiver acima de 10%, ele será kickado.
  13. Olá. Aqui está a dff e txd, para deixar a arma invisível: clique aqui
  14. Há várias formas de não carregar texturas e modelos no cache do cliente. Uma delas é usar o conteúdo do txd/dff na função engineLoadTXD. Outra forma seria usar loadstring() e pcall() juntamente com um sandbox (ambiente/environment), que seria totalmente mais seguro, porém um pouco mais complexo.
  15. Você tem duas opções: não usar o parâmetro ou pulá-lo. Acho que é melhor eu responder a sua pergunta. Faça deste jeito: addCommandHandler('veh', function(player) local x, y, z = getElementPosition(player) vehicle = createVehicle(411, x, y, z, _, _, _, 'ABC-1337') end ) Na situação acima, suponhamos que você queira apenas criar o veículo com uma placa diferente. Porém, antes do parâmetro da placa, você tem 3 outros parâmetros: Rotação X, Rotação Y e Rotação Z. Para ignorar, basta adicionar um underline (_), como no exemplo acima.
  16. local spawns = { {2926, 681, 1000}, {1876, 633, 1000}, {1193, 1125, 1000}, {1927, 2028, 1000}, {2682, 2299, 1000}, {1887, 2654, 1000}, {918, 2491, 1000} } local current = 0 function spawn(p) current = math.min(current + 1, #spawns) local x, y, z = spawns[current][1], spawns[current][2], spawns[current][3] fadeCamera(p, true) spawnPlayer(p, x, y, z, 360, 0, 0, 0) if current == #spawns then current = 0 end end addEventHandler('onPlayerWasted', root, function() setTimer(spawn, 2000, 1, source) end )
  17. Percebi isso agora, Lord. Obrigado! (edite para mim se possível, eu não tenho a função de editar nessa thread)
  18. -- client-side local canvas = Vector2(guiGetScreenSize()) local ads = { -- ['Tipo'] = {caminho do arquivo de voz, texto} ['Welcome'] = {'sounds/voice1.mp3', 'Seja bem-vindo(a) ao servidor.'}, } local messageType local voiceElement local startTick addEvent('tts:play()', true) addEventHandler('tts:play()', root, function(type) if ads[type] then if not voiceElement then local voice = fileExists(ads[type][1]) and ads[type][1] or 'https://translate.google.com/translate_tts?ie=UTF-8&tl=pt-BR&client=tw-ob&q='..string.gsub(ads[type][2], ' ', '+') messageType = ads[type][2] startTick = {getTickCount(), 8} voiceElement = playSound(voice, false) addEventHandler('onClientRender', root, draw) end else if _debug then outputDebugString('Não foi possível reproduzir o som.') end end end) function draw() if messageType ~= nil then dxDrawText(messageType, 0, 0, canvas.x, canvas.y, 0xffffffff, 1.20, 'default-bold', 'center', 'center') if startTick[1] + (startTick[2] * 1000) < getTickCount() then messageType = nil startTick = nil voiceElement = nil removeEventHandler('onClientRender', root, draw) end end end -- server-side (apenas uma base de como você chamaria o evento) triggerClientEvent(player, 'tts:play()', player, 'Welcome') Fiz esse script sem testar, deve funcionar se você usar corretamente. Se o sistema não encontrar o arquivo de som, ele irá executar a voz do Google Tradutor.
  19. engineSetModelLODDistance
  20. Tente desabilitar a colisão do objeto. -> setElementCollisionsEnabled
  21. Há um erro de lógica no seu código. Sempre que a latência do jogador estiver acima de 100, uma nova imagem será criada. Este é o porquê da imagem não estar sendo destruída. Você deve verificar se o jogador está com a imagem na tela. Fiz um código rápido, só pra mostrar. local highPing = false setTimer( function( ) if ( not highPing ) then -- // Verificar se ele não esta na tela de "ping alto". Não tem mensagem? Então passemos para a linha de baixo. if ( getPlayerPing( localPlayer ) > 100 ) then -- // O ping é maior que 100? Se sim, vamos avisar ao jogador, mostrando uma mensagem na tela. highPing = true -- // Salvar a informação de que ele está com uma mensagem na tela. addEventHandler( "onClientRender", root, show, true, "low-128" ) -- // Adicionar o evento, para que mostre a mensagem. end else -- // Se o jogador estiver na tela, então: if ( getPlayerPing( localPlayer ) <= 100 ) then -- // O ping dele é menor ou igual a 100? Se sim, podemos retirar a mensagem da tela. highPing = false -- // Salvar a informação que retiramos a mensagem da tela do jogador. O ping dele já se normalizou. removeEventHandler( "onClientRender", root, show ) -- // Remover o evento, nenhuma mensagem está sendo mostrada mais. end end end, 666, 0 ) function show() local screen = Vector2( guiGetScreenSize( ) ) dxDrawRectangle( 0, 0, screen.x, screen.y, tocolor( 32, 32, 32, 64 ), false ) dxDrawText( "Sua conexão está ruim", 0, 0, screen.x, screen.y, tocolor( 255, 255, 255, 255 ), 1.80, "clear", "center", "center" ) end
  22. Creio eu que não exista um automático. Além do mais, desculpe a pergunta mas... qual é a dificuldade de apertar TAB?
×
×
  • Create New...