Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,005
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Poste o código server-side, fazendo favor.
  2. Seria melhor baixar da comunidade oficial em vez de sites de terceiros. Muitos scripts postados em sites de terceiros foram roubados da comunidade oficial. (os meus resources, por exemplo). Na comunidade você não precisa se preocupar com propagandas.
  3. Aleatório não vai funcionar, ele tem grandes chances de repetir a mesma posição. Indexe a tabela das posições e use um contador incremental de 1 até #localitionveh, a posição a ser usada deve ser localitionveh[contador] e sempre que ele for usado, aumentará em +1, dessa forma a próxima vez que for usado, usará a posição seguinte da tabela sem chances de repetir. Quando o contador ficar maior que o tamanho da tabela (5), volta a 1 e reinicia o ciclo. Mfim = createMarker (-1828.72888, -1627.62219, 23.23001 -1, "cylinder", 2, 0 ,255 ,0, 255) Bfim = createBlipAttachedTo ( Mfim, 19 ) setElementVisibleTo ( Bfim, root, false ) veh = {} -- Recomendo que evite posições decimais muito grandes. Use só até 3 casas decimais. localitionveh = { [1] = {493, -615.03826904297, 1807.0825195313, 0.19021162390709, 0, 0, 76.391845703125}, [2] = {493, -2375.00317, 1741.60583, 0.36448, 0, 0, 76.391845703125}, [3] = {493, -2297.87598, 1644.67639, 0.61662, 0, 0, 76.391845703125}, [4] = {493, -2280.10376, 1577.25720, -0.03525, 0, 0, 76.391845703125}, [5] = {493, -2208.14648, 1486.88440, 0.68383, 0, 0, 76.391845703125}, -- O primeiro, quinto e sexto valor das posições não estão sendo usados. Recomendo que delete-os. } i = 1 -- contador global function inicio () if isElement (veh[client]) then -- Client = localPlayer, somente neste caso. destroyElement (veh[client]) veh[client] = nil end local vx vy, vz, vrot = localitionveh[ i ][ 2 ], localitionveh[ i ][ 3 ], localitionveh[ i ][ 4 ], localitionveh[ i ][ 7 ] i = i + 1 if i > #localitionveh then -- se i > 5, então: i = 1 end Trabalho = true veh4[client] = createVehicle ( 514, vx, vy, vz, 0, 0, vrot ) setElementVisibleTo (Bfim, client, true) warpPedIntoVehicle (client, veh[client]) outputChatBox ("#ffff00Take this Flag Card without leaving the vehicle!", client, 0, 0, 0, true) local player1 = client addEventHandler ( "onVehicleExplode", veh[client], function () if (veh[player1]) and isElement(veh[player1]) then destroyElement (source) setElementVisibleTo ( Bfim, player1, false ) outputChatBox("Mission failled, your vehicle blow.", player1 , 255, 0, 0) end end) end addEvent ("iniciaJob", true) -- Cria o evento "iniciaJob e permite que ele seja chamado pelo client. addEventHandler ("iniciaJob", getRootElement(), inicio) -- Executa essa função quando o evento "iniciaJob" for chamado.
  4. Recomenda-se anular a variável após destruir o elemento dela. Para desocupar o espaço na memória. function destrui () if veh[source] and isElement(veh[source]) then destroyElement ( veh[source] ) veh[source] = nil end end
  5. Geralmente os painéis devem ser criados ao iniciar o resource e logo em seguida deixá-los invisíveis. Dessa forma as funções que mostram/ocultam o painel nunca darão erro por falta de painel, pois ele sempre existirá. (No caso de painéis DX, basta iniciar/parar de renderizá-los, já que eles são recriados a cada frame.) No seu caso você só cria o painel após a função de criação ser chamada pelo server. Mas o que pode acontecer é o server chamar a função de mostrar o painel antes disso. E aí que ocorre o problema, ele vai tentar mostrar algo que não foi criado ainda. Além disso, tenha em mente que os triggerEvents precisam de certo tempo para serem concluídos, diferente de uma chamada interna de função que ocorre instantaneamente. Isso significa que se você der triggerClientEvent na função que cria o painel ao mesmo tempo que usa triggerClientEvent na função que mostra o painel, ele não terá tempo de criar o painel antes de mostrá-lo, gerando erro pois o painel ainda não existe.
  6. Você deve fazer isso que o @MaligNos disse, é o mais fácil e recomendável. Outra forma de fazer seria você colocar o localPlayer como parâmetro de função no triggerServerEvent e declará-lo nos parâmetros da função server-side. client-side triggerServerEvent ("reloadWeapon", localPlayer, localPlayer) server-side addEvent ("reloadWeapon", true) addEventHandler ("reloadWeapon", root, function (thePlayer) local cw = getPedWeapon (thePlayer) local d = weapons[cw] if (cw) and (d) and (takePlayerMoney (thePlayer, d.cost)) then setWeaponAmmo (thePlayer, cw, d.ammo) end end)
  7. A mensagem está dizendo que há problemas nos arquivos do seu GTA SA e não no MTA. Reinstale o GTA SA, se não funcionar então é vírus corrompendo seu GTA. Lembre-se de remover qualquer mod do seu GTA ou arquivos que executam os mods (modloader.asi).
  8. Só uma pequena correção: Se a função só possui 1 comando ativando ela. Não precisa verificar se o cmd = "consertar", pois isso sempre será true. Deixei comentários no código pra vc entender o que acontece em cada linha. Fazer isso é importante para estudar seu código. function solicitaPay (thePlayer, cmd, user) local accName = getAccountName (getPlayerAccount(thePlayer)) -- accName = nome da conta do jogador que executou o comando. (Exemplo: joao123) if isObjectInACLGroup ("user."..accName, aclGetGroup ("MEC") ) then -- Se o objeto user.joao123 está na ACL Group MEC, então: if not user then -- Se nenhum nick foi informado junto com o comando, então: outputChatBox ("Erro de sintaxe, use /consertar <nick>", thePlayer, 255, 255, 0) elseif not getPlayerFromPartialName (user) then -- Se o nick foi informado mas não existe um jogador com esse nick, então: outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) else -- Se o nick foi informado e o jogador foi encontrado, então: local theUser = getPlayerFromPartialName (user) -- theUser = jogador encontrado. (elemento) if getElementData (theUser, "mecanico.solicitation") then -- Se o jogador encontrado tem uma solicitação pendente, então: outputChatBox ("Alguém já está solicitando pagamento mecânico a este jogador.", thePlayer, 255, 255, 0) else -- Se o jogador encontrado não tem nenhuma solicitação pendente, então: setElementData (theUser, "mecanico.solicitation", thePlayer) -- Coloca solicitação pendente no jogador encontrado. outputChatBox ("Você solicitou pagamento para consertar o veículo de "..user, thePlayer, 0, 255, 0, true) -- Avisa o jogador que executou o comando, que ele enviou uma solicitação ao jogador encontrado. outputChatBox (getPlayerName (thePlayer).."#FFFF00 está pedindo $800 para consertar seu veículo. Use /aceitar ou /recusar", theUser, 255, 255, 255, true) -- Avisa o jogador encontrado que ele tem uma solicitação de pagamento, para que ele use /aceitar ou /recusar. setTimer (function () -- Inicia um temporizador de 10 segundos para remover automaticamente a solicitação, caso o jogador não recuse nem aceite, para ele não ficar com a solicitação eternamente. if getElementData (theUser, "mecanico.solicitation") then -- Depois dos 10 segundos, se o jogador ainda estiver com a solicitação (não recusou nem aceitou) setElementData (theUser, "mecanico.solicitation", false) -- Remove a solicitação dele. outputChatBox ("O pedido de pagamento de "..getPlayerName (thePlayer).."#FFFF00 expirou.", theUser, 255, 255, 0, true) -- Avisa pra ele, que a solicitação que ele tinha pendente foi expirada. end end, 10000, 1) end end else -- Se o objeto user.joao123 não está na ACL MEC, então: outputChatBox ("Você não tem permissão para executar este comando!", thePlayer, 255, 0, 0) -- Avisa o jogador que ele não tem permissão. end end addCommandHandler ("consertar", solicitaPay) -- Comando que irá ativar a função solicitaPay. Sugiro também que vc estude lógica de programação, assim você saberá onde deve colocar as funções que passamos pra você e também terá extrema facilidade de entender o que vc está fazendo.
  9. Nessa parte function fix (playerSource) local theVehicle = getPedOccupiedVehicle (playerSource) if theVehicle and getVehicleController ( theVehicle ) == playerSource then fixVehicle (theVehicle) outputChatBox ("Your vehicle has been fixed !" , thePlayer) end end addCommandHandler ("fix" , fix) Substitua por isso: local theVehicle = getPedOccupiedVehicle (thePlayer) if theVehicle and getVehicleController (theVehicle) == thePlayer then fixVehicle (theVehicle) outputChatBox ("Seu veículo foi consertado.", thePlayer, 0, 255, 0) end Você deve tirar aquele outro outputChatBox que eu coloquei na minha parte, serão irá mandar 2x no chat. Delete essa linha que fica em baixo do setElementData: outputChatBox ("Seu veículo foi consertado.", thePlayer, 0, 255, 0)
  10. Use a ferramenta <> para postar códigos. https://prnt.sc/jp4g81
  11. Eu faria mais ou menos assim: 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 solicitaPay (thePlayer, cmd, user) if not user then outputChatBox ("Erro de sintaxe, use /consertar <nick>", thePlayer, 255, 255, 0) elseif not getPlayerFromPartialName (user) then outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) else local theUser = getPlayerFromPartialName (user) if getElementData (theUser, "mecanico.solicitation") then outputChatBox ("Alguém já está solicitando pagamento mecânico a este jogador.", thePlayer, 255, 255, 0) else setElementData (theUser, "mecanico.solicitation", thePlayer) outputChatBox ("Você solicitou pagamento para consertar o veículo de "..user, thePlayer, 0, 255, 0, true) outputChatBox (getPlayerName (thePlayer).."#FFFF00 está pedindo $800 para consertar seu veículo. Use /aceitar ou /recusar", theUser, 255, 255, 255, true) setTimer (function () if getElementData (theUser, "mecanico.solicitation") then setElementData (theUser, "mecanico.solicitation", false) outputChatBox ("O pedido de pagamento de "..getPlayerName (thePlayer).."#FFFF00 expirou.", theUser, 255, 255, 0, true) end end, 10000, 1) end end end addCommandHandler ("consertar", solicitaPay) function aceitaPay (thePlayer, cmd) if getElementData (thePlayer, "mecanico.solicitation") then if getPlayerMoney (thePlayer) >= 800 then takePlayerMoney (thePlayer, 800) givePlayerMoney (getElementData (thePlayer, "mecanico.solicitation"), 800) outputChatBox ("Seu pedido foi aceito. Você recebeu $800 pelo conserto.", getElementData (thePlayer, "mecanico.solicitation"), 0, 255, 0) -- Função que repara o veículo aqui. setElementData (thePlayer, "mecanico.solicitation", false) outputChatBox ("Seu veículo foi consertado.", thePlayer, 0, 255, 0) else outputChatBox ("Você não tem dinheiro suficiente.", thePlayer, 255, 0, 0) end end end addCommandHandler ("aceitar", aceitaPay) function recusaPay (thePlayer, cmd) if getElementData (thePlayer, "mecanico.solicitation") then outputChatBox ("Seu pedido foi recusado.", getElementData (thePlayer, "mecanico.solicitation"), 255, 0, 0) setElementData (thePlayer, "mecanico.solicitation", false) outputChatBox ("Você recusou o pagamento. Seu veículo não foi consertado.", thePlayer, 255, 0, 0) end end addCommandHandler ("recusar", recusaPay) Espero ter ajudado.
  12. Qual a dificuldade que vcs estão encontrando? Qual parte exatamente vcs não sabem fazer?
  13. E quem disse que só funciona em Ped? Vc chegou a testar? Se tivesse pelo menos lido o exemplo, teria visto que funciona em Player também.
  14. Pq vc não respondeu minha pergunta?
  15. Adicione uma condição que verifica se vehicle existe ou não. if vehicle and getElementType(vehicle) == "vehicle" then
  16. A função PlayerNameTags não existe. Delete essa linha.
  17. A linha 5 está dando um alerta pois o evento está sendo ativado quando ele já está ativo. Pois falta um removeEventHandler quando o jogador sai da zona verde. addEventHandler ("disableGodMode", getRootElement(), function() removeEventHandler ("onClientPlayerDamage", getRootElement(), cancelEventEvent) end) E a função cancelEventEvent não existe. Ou então você não mostrou a parte do código que ela aparece. ------------------------ Nem tudo que colide nas zonas é uma entidade válida. Adicione um verificador antes da condição, para ver se o que colidiu é um elemento. if isElement (hitElement) and (getElementType (hitElement) == "player") and (getElementID (source) == "greenzoneColshape") then Obs: Existe um jeito mais fácil e mais leve de criar zonas verdes sem o uso de zonas de colisão. Usando apenas isInsideRadarArea para verificar se o jogador que está recebendo dano está dentro da zona ou não. Se estiver, cancela o dano e pronto.
  18. Estude lógica de programação no YouTube. Você precisa saber lógica de programação para entender algo de programação. Entre aquelas aspas vazias ali (" "), coloque scoreboard, assim: call(getResourceFromName("scoreboard"),"addScoreboardColumn","FPS")
  19. Não coloque títulos muito grandes no seu post. Seja breve com uma pequena frase. No texto do post dai vc explica com mais detalhes o seu problema. Se continuar postando os tópicos dessa forma, irei ignorar da próxima vez. ------------------------------ Na linha 87. Sempre vai gerar erro se o jogador não tiver a data "FPS". Use um tostring ( ) antes para converter o valor booleano em string. dxDrawText (tostring (getElementData(getLocalPlayer(),"FPS")), posx2-12, posy2-6, x, y, tocolor ( 255, 255, 255, 255 ), 1.4, "default-bold") Você não deveria armazenar o FPS nem o PING como playerData, pois são valores que se alteram a cada frame. Sua performance será prejudicada se ficar usando setElementData e getElementData a cada frame. Em vez disso, use getCurrentFPS e getPlayerPing, armazene-os em variáveis locais e use no dxDrawText, usando sempre um tostring para caso os valores sejam false.
  20. Não coloque títulos muito grandes no seu post. Seja breve com uma pequena frase. No texto do post dai vc explica com mais detalhes o seu problema. E você não colocou a parte onde ocorre o problema. Não temos como adivinhar se você não coloca a parte onde o erro ocorre.
  21. Postou no lugar errado. Da próxima vez poste em Programação Lua.
  22. Você apenas realocou os elementos pelo script. Vc não clicou na coluna para reorganizar. Preciso que os números fiquem na ordem correta quando eu clicar na coluna dos números. Tanto do maior pro menor, quanto do menor pro maior. Pois a tabela que estou usando possui várias colunas de números, o usuário pode escolher qual delas quer usar o filtro.
  23. Essa sua função não foi a que eu mandei. Use essa: function inicio4 () if isElement (veh4[client]) then -- Client = localPlayer, somente neste caso. destroyElement (veh4[client]) veh4[client] = nil end Trabalho = true veh4[client] = createVehicle (493, -615.03826904297, 1807.0825195313, 0.19021162390709, 0, 0, 76.391845703125) setElementVisibleTo ( Bfim4, client, true ) warpPedIntoVehicle (client, veh4[client]) outputChatBox ("Take this Flag Card without leaving the vehicle!", client, 255, 255, 0) addEventHandler ( "onVehicleExplode", veh4[client], function () if (veh4[client]) and isElement(veh4[client]) then destroyElement (veh4[client]) setElementVisibleTo ( Bfim4, client, false ) outputChatBox("Mission failled, your vehicle blow.", client , 255, 0, 0) end end) end addEvent ("iniciaJob4", true) addEventHandler ("iniciaJob4", getRootElement(), inicio4) Na sua função, setElementVisibleTo vai falhar se o veículo (source) estiver vazio.
×
×
  • Create New...