Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,980
  • Joined

  • Last visited

  • Days Won

    181

Everything posted by Lord Henry

  1. O painel admin tem uma função de tirar print da tela do jogador e deixar salva para outros Staffs poderem acessar pelo painel, sugiro que dê uma estudada nele. Você seleciona o jogador no painel admin, e dai clica no botão "screenshot" para tirar uma print da câmera do jogador. Essa print fica disponível no painel para qualquer Staff poder ver.
  2. server.lua addEventHandler ("onPlayerLogin", root, function (_, currAcc) -- Ativa essa função quando algum player logar. print ("Logou na moral.") -- Manda isso no /debugscript 3 triggerClientEvent (source, "recebeuLogin", source) -- Ativa esse evento no client de quem logou. end) client.lua local screen = Vector2 (guiGetScreenSize()) -- Obtém a resolução do jogador e guarda numa variável. addEvent ("recebeuLogin", true) -- Adiciona esse evento que será ativado lá pelo server.lua addEventHandler ("recebeuLogin", root, function () -- Ativa essa função quando esse evento for chamado. addEventHandler ("onClientRender", root, renderTexto) -- Começa a executar a função renderTexto a cada frame. end) function renderTexto () dxDrawText ("(ANIMAÇÃO MAROTA AQUI)", 0, 0, screen.x, screen.y, tocolor(255, 255, 0, 255), 3, "default", "center", "center") -- Mostra isso na tela a cada frame. setTimer (removeEventHandler, 5000, 1, "onClientRender", root, renderTexto) -- Depois de 5 segundos, para de mostrar o texto na tela. end Obs: Fiz de cabeça. É necessário testar.
  3. O evento que citei só funciona server-side. Seu script é client-side. Você vai precisar de um triggerClientEvent.
  4. Sim, é possível. Porém extremamente pesado de processar.
  5. Não é possível descompilar luac. O descompilador é de uso exclusivo da administração do MTA para verificar scripts supostamente maliciosos. Jogadores não possuem acesso ao descompilador.
  6. Ou você pode simplesmente usar um elementData no jogador, onde cada gamemode só funciona nos jogadores que possuam um valor específico nesse elementData. É claro que isso será muito complexo, visto que todos os resources que dependem do gamemode precisarão fazer essa verificação de data também, o que vai prejudicar seu desempenho no servidor. Outra alternativa seria existir uma tabela global de jogadores onde cada jogador entra em um índice diferente após escolher o Gamemode no painel de login. Então cada gamemode e cada resource que dependa de gamemode irá verificar essa tabela usando um call (exports). gamemodeDeGeral = { ["Freeroam"] = {}, ["Race"] = {}, ["DM"] = {}, ["DayZ"] = {}, ["RPG"] = {}, } addEventHandler("onPlayerLogin", root, function(thePlayer) table.insert(gamemodeDeGeral["Freeroam"], thePlayer) -- Exemplo para inserir um player que acabou de logar no Freeroam. end) addEventHandler("onPlayerLogout", root, function(thePlayer) for i,p in pairs (gamemodeDeGeral["Freeroam"]) do if (p == thePlayer) then gamemodeDeGeral["Freeroam"][i] = nil -- Exemplo para remover um player da tabela Freeroam ao deslogar. return end end end)
  7. O parâmetro id vai ser sempre o que o jogador digitou após o comando, então ele pode ser tanto o ID de um jogador ou valor de dinheiro. O parâmetro qnt só vai existir se dois valores forem especificados após o comando. Se o jogador apenas especificar um, então qnt será nil. Ou seja, o comando /money 123123 fará com que id seja 123123 e qnt seja nil Falta verificações de segurança, você precisa garantir que tanto o id quanto qnt sejam números. Além de verificar se os valores informados são números, você precisa garantir que eles sejam inteiros (o player pode tentar informar números decimais, passando pelo tonumber). Adicione uma condição verificando se qnt existe. Caso não exista, considere o parâmetro id como sendo a quantidade e então use o ID de si mesmo. Adicione uma condição verificando se id existe. Caso não exista, dê feedback de erro de sintaxe. O segundo erro acontece pois id não deve estar depois do targetPlayer. Basta removê-lo dali que resolve o erro. Não use nome de função igual ao comando que ativa ela. Para facilitar de entender: function myMoney(thePlayer, cmd, id, qnt) -- thePlayer é quem executou o comando. if (qnt) then -- Se qtd existe (se foram especificados dois valores após o comando), então: local playerQTD = tonumber(qtd) -- Torna a string qtd em um número. if (playerQTD) then -- Se qtd é um número, então: if (math.floor(playerQTD) == playerQTD) then -- Se qtd é um integer, então: if (id) then -- Se id existe, então: local playerID = tonumber(id) -- Torna a string id em um número. if (playerID) then -- Se id é um número, então: if (math.floor(playerID) == playerID) then -- Se id é um integer, então: local targetPlayer = getPlayerID(playerID) -- Espero que você tenha essa função criada em outro lugar, pois ela não existe nativamente. if (targetPlayer) then -- Se existe um jogador com este ID, então: setPlayerMoney(targetPlayer, playerQTD) -- Dá o dinheiro pro jogador com este ID. else outputChatBox ("Erro: Jogador com o ID '"..id.."' não foi encontrado.", thePlayer, 255, 0, 0) end else outputChatBox ("Erro: ID '"..id.."' precisa ser um número inteiro.", thePlayer, 255, 0, 0) end else outputChatBox ("Erro: ID '"..id.."' precisa ser um número.", thePlayer, 255, 0, 0) end else -- Se id não existe, então: outputChatBox ("Erro de sintaxe: #ffffff/money <ID> <quantidade>", thePlayer, 255, 0, 0, true) end else outputChatBox ("Erro: A quantidade de dinheiro precisa ser um número inteiro.", thePlayer, 255, 0, 0) end else outputChatBox ("Erro: A quantidade de dinheiro precisa ser um número.", thePlayer, 255, 0, 0) end elseif (id) then -- Se não existe qnt mas existe id (só foi especificado um valor após o comando), então: local playerQTD = tonumber(id) -- Torna a string id em um número. Usando o valor de id como quantidade. if (playerQTD) then -- Se id é um número, então: if (math.floor(playerQTD) == playerQTD) then -- Se id é um integer, então: setPlayerMoney(thePlayer, playerQTD) -- Dá o dinheiro pra si mesmo. else outputChatBox ("Erro: O valor especificado após o comando precisa ser um número inteiro.", thePlayer, 255, 0, 0) end else outputChatBox ("Erro: O valor especificado após o comando precisa ser um número.", thePlayer, 255, 0, 0) end else -- Se não existe id e nem qtd, então: outputChatBox ("Erro de sintaxe: #ffffff/money <ID> <quantidade>", thePlayer, 255, 0, 0, true) end end addCommandHandler("money", myMoney) -- Não se usa nome de função igual ao comando. Mude um dos dois para não dar conflito. Obs: É recomendável restringir esse comando, caso contrário qualquer player pode dar dinheiro pra si mesmo ou pros outros. Versão resumida sem nenhuma verificação de segurança: (pode gerar erros no debugscript) function myMoney(thePlayer, cmd, id, qnt) if (qnt) then -- Se qnt existe, então: local targetPlayer = getPlayerID(tonumber(id)) -- Obtém o jogador que tem o ID especificado. setPlayerMoney(targetPlayer, qnt) -- Dá o dinheiro de valor qnt para quem tem o ID de valor id. else -- Se qnt não existe, então: setPlayerMoney(thePlayer, id) -- Dá o dinheiro de valor id em si mesmo. end end addCommandHandler("money", myMoney) Obs: Vale lembrar que setPlayerMoney vai deixar o dinheiro do jogador igual a quantidade especificada. Enquanto que givePlayerMoney vai somar o valor especificado no dinheiro atual do jogador e a função takePlayerMoney vai subtrair o valor especificado no dinheiro atual do jogador.
  8. Defina a dimensão e interior do jogador que logou como 0. setElementDimension setElementInterior
  9. Mostre a parte do código que vc está usando para criar a minigun e também a parte que seta a propriedade.
  10. @Sr. BruxoMostre o que vc já tentou fazer.
  11. Você precisa criar a versão LOD desse objeto e substituir o LOD original também.
  12. setElementHealth (player, 100) setPedArmor (player, 100)
  13. Ban appeals must be in English. Revisões de banimentos precisam ser feitos em inglês.
  14. Interessante e bem detalhado. Porém faltou a informação mais importante para os candidatos à vaga: Ganhos e benefícios. Se esperam que as pessoas trabalhem de graça, então estão completamente fora da realidade ou precisam diminuir muito os requisitos.
  15. @Paulo Mikhael Gomes S. Favor não reviver tópicos antigos.
  16. Desculpe, esqueci de mencionar que a função split retorna uma tabela em vez dos valores separados. Dai você precisa acessar os valores da tabela pelos índices. function SetarCor (playerSource, getMsg) local uVehicle = getPedOccupiedVehicle (playerSource) if (uVehicle) then local cores = split (getMsg, ',') local r = cores[1] or 0 local g = cores[2] or 0 local b = cores[3] or 0 setVehicleColor (uVehicle, r, g, b) iprint (r, g, b) end end addEvent ("SetarCor", true) addEventHandler ("SetarCor", root, SetarCor)
  17. vehTimers = {} -- Tabela de timers anexados aos veículos. addEventHandler ("onVehicleExit", root, function (thePed, seat) -- Função ativada quando alguém sair de algum veículo. if (seat == 0) then -- Se quem saiu do veículo era o motorista, então: for i,v in pairs (Carro) do -- Para cada veículo da tabela Carro, faça: if not (isElement(v)) then -- Se um veículo da tabela Carro não existe mais, então limpa ele da tabela. Carro[i] = nil end if (theSource == v) then -- Se o veículo que o jogador saiu é o mesmo que este veículo específico da tabela, então: vehTimers[source] = setTimer (function (theSource) -- Inicia um timer de 10 segundos, vinculado ao veículo da tabela. (theSource = source) vehTimers[theSource] = nil -- Limpa a variável deste timer. if not (isElement(theSource)) then return end -- Se o veículo que o player saiu já não existe mais, então cancela essa função e nada acontece. destroyElement (v) -- Destrói o veículo. Carro[i] = nil -- Limpa ele da tabela Carro. end, 10000, 1, source) -- Passa o source por parâmetro para dentro do setTimer, pois dentro do setTimer o source original não existe. break -- Encerra o looping para não precisar verificar os demais veículos, pois ele já foi encontrado. end end end end) addEventHandler ("onVehicleEnter", root, function (thePed, seat) -- Função ativada quando alguém entrar em algum veículo. if (seat == 0) then if (isTimer(vehTimers[source])) then killTimer (vehTimers[source]) -- Cancela o timer caso alguém entre de motorista no veículo antes do tempo acabar. vehTimers[source] = nil end end end) Obs: Tenha um sistema que impeça que outros players entrem no veículo que não é deles.
  18. @DaddyMTAvocê não pode converter um texto único em 3 números usando apenas o tonumber. Se o texto possuir algum símbolo entre os números, dará erro. Você pode fazer de 2 formas: Mais recomendada: criar 3 editboxes. Um para a cor Red, outro pra cor Green e outro pra cor Blue. E depois use tonumber em cada valor. Opcional: Limite o número de caracteres deles em no máximo 3. Bloqueie qualquer caractere que não seja número de ser digitado nos campos. Considere campos vazios como 0. Evitando erros. Mais fácil: pegue o texto digitado nos campos e separe-o em 3 sub-textos usando a função split. Para isso ser possível, é necessário que o texto tenha algum caractere separando os valores, por exemplo uma vírgula. Então é só dar tonumber em cada uma delas. Opcional: Verifique sempre se o split retornou 3 valores. Se só encontrar 2 strings, considere o terceiro como 0. Se encontrar só 1 string, considere o segundo e terceiro como 0.
  19. Basta adicionar isso no início das suas funções: if not (matchingDimension) then return end -- Se o elemento que colidiu não estiver na mesma dimensão que o marker, então cancela esta função e nada acontece.
  20. Primeiramente você precisa prestar atenção que thePlayer nem sempre será um jogador quando a função foi ativada pelo onMarkerHit. Ele pode ser qualquer elemento que colidiu no marker. Sendo assim, você precisa verificar se thePlayer é mesmo um player. Depois disso, aí sim você verifica se thePlayer está em um veículo. Pois se ele não for um player ou ped, dará erro. function PortaoDoor1Loja (thePlayer) if (getElementType(thePlayer) == "player") then -- Se o elemento thePlayer for um jogador, então: if not (getPedOccupiedVehicle(thePlayer)) then -- Se o thePlayer não está em um veículo, então: moveObject (Gate10, 200, 954.4, -1720.7, 12.6) -- Não é necessário utilizar números com tantos decimais para este objetivo. moveObject (Gate11, 200, 954.4, -1726.1, 12.6) else -- Se o thePlayer está em um veículo, então: outputChatBox ("Não é possível passar enquanto estiver em um veículo.", thePlayer, 255, 0, 0) end end end addCommandHandler ("open", PortaoDoor1Loja) addEventHandler ("onMarkerHit", markerlojacarros, PortaoDoor1Loja)
  21. Utilize GetAllElementData em um elemento para saber todas as elementDatas e seus valores que estão nele.
×
×
  • Create New...