-
Posts
3,983 -
Joined
-
Last visited
-
Days Won
181
Everything posted by Lord Henry
-
Então seu script de TAGs foi feito errado. Ele deveria cancelar o chat normal antes e mandar o chat com TAG depois. Exemplo: function tagChatbox (text, msgtype) local account = getAccountName (getPlayerAccount (source)) local name = getPlayerName (source) if msgtype == 0 then -- Se a mensagem for pelo /say (tecla T) if isObjectInACLGroup ("user."..account, aclGetGroup ("Console")) then -- Se o jogador estiver na ACL Console, faz o seguinte: cancelEvent (true) -- Cancela o chat normal. outputChatBox ("#494949║#1b1b1b✖ #FFFF00DONO #1b1b1b✖#494949║#ffffff - "..name.."#ffffff: "..text, root, 255, 255, 255, true) -- Manda o chat com TAG. outputServerLog ("CHAT: [Console] "..name..": "..text) -- Registra o chat no serverlog. elseif isObjectInACLGroup ("user."..account, aclGetGroup ("Admin")) then -- Mesma coisa se estiver na ACL Admin. cancelEvent (true) outputChatBox ("#494949║#ffffff✖ #FF0000ADMIN #ffffff✖#494949║#ffffff - "..name.."#ffffff: "..text, root, 255, 255, 255, true) outputServerLog ("CHAT: [Admin] "..name..": "..text) else -- Se for um jogador comum, então: cancelEvent (true) outputChatBox ("#003CFF║#ffffff✘ #00A513JO#ffff00GA#003CFFDOR #ffffff✘#003CFF║#ffffff - "..name.."#ffffff: "..text, root, 255, 255, 255, true) outputServerLog ("CHAT: [Jogador] "..name..": "..text) end end end addEventHandler ("onPlayerChat", getRootElement(), tagChatbox)
-
O Freeroam não fica na pasta [gamemodes], ele fica no [gameplay]. Ele é o painel F1.
-
Desligue o Freeroam.
-
Se for em painel GUI, use guiCreateEdit. Para fazer a função de procura, use essa função: addEventHandler("onClientGUIClick", getRootElement(), function (btn) if btn ~= "left" then return end if source == searchBox then -- Função que busca os jogadores pela barra de pesquisa chamada searchBox. guiGridListClear(gridJogadores) -- Lista que mostra a lista dos jogadores encontrados. local Nome = guiGetText (searchBox) for i, thePlayer in ipairs (getElementsByType ("player")) do if (thePlayer ~= localPlayer) then if (string.find(getPlayerName(thePlayer):lower(), Nome:lower())) then local row = guiGridListAddRow (gridJogadores) guiGridListSetItemText (gridJogadores, row, 1, getPlayerName(thePlayer), false, false) end end end end end)
-
bug no download
Lord Henry replied to BielReal's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Depois de executar o Diag.exe, ele deixa o link automaticamente no seu Ctrl+C. (área de transferência) -
Muito bons os mods exclusivos. Sucesso aos senhores. Mas tomem cuidado com "no modo play, baseado no rpg e roleplay" pois isso é o padrão da maioria dos servidores RPG do MTA. Um Freeroam com alguns mods de RPG.
-
bug no download
Lord Henry replied to BielReal's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Mande print do que aparece quando o MTA crasha. -
concecissonaria ajuda com salvar sistema
Lord Henry replied to tcharles2019's topic in Programação em Lua
É mais fácil você baixar uma concessionária no site oficial da comunidade do MTA, que realmente funcione. Baixe este aqui, se tiver problemas, me avise: shopcar-system Edit: Ele não permite que jogadores deslogados acessem a loja. -
ERRO NO MTA CD20
Lord Henry replied to Jubi's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Isso parece ser erro do servidor e não do seu computador. Já tentou em outros servidores pra ver se o erro continua? -
Como é um curto período de tempo, usar setTimer é mais viável. Você pode fazer de dois jeitos: Ao clicar no botão pela primeira vez, inicia o timer. Você cria uma condição ao clicar no botão verificando se existe um timer ativo ou não, se existir o timer, bloqueia a função do botão, mostrando uma mensagem de erro ao jogador. Se não existir um timer, permite a função e inicia o timer. Sempre que o jogador clicar no botão e o timer estiver ativo, bloqueará a função. Quando o timer terminar, permite normalmente. Ao clicar no botão pela primeira vez, inicia o timer e desativa o botão (se o painel for feito em GUI, use GuiSetEnabled e desative-o), depois que acabar o timer, reativa o botão. O botão não é clicável enquanto está desativado.
-
Sim, é possível. Qual o objetivo de fazer isso?
-
Sim. É possível fazer isso usando GuiGridListSetItemColor.
-
-
A parte de cima é apenas um exemplo, o que importa é a função do math.round. O meu eu apenas editei essa parte, no server.lua: local ratio = kill / death if death == 0 and kill == 0 then -- Se ambos os valores forem 0, deixa o ratio em 0 também. table.insert (killDeath, 0) elseif kill ~= 0 and death == 0 then -- Se death for 0 mas kill não, deixa o ratio como desconhecido, pois não é possível dividir algo por 0. table.insert (killDeath, "?") else -- Se nenhum valor for 0, faz a divisão normalmente e aplica o redutor decimal. table.insert (killDeath, math.round (ratio, 3)) end Além é claro, de adicionar a função do math.round no início do script.
-
Pronto, bem melhor agora. https://prnt.sc/j93dst Deixei com 3 casas decimais.
-
Muito obrigado, eu estava precisando disso para reduzir o número de casas decimais de um número. Diversas vezes a divisão do Kills / Deaths gera um valor real muito grande, tipo 3.333333, assim posso reduzi-lo para apenas 2 casas decimais, ficando 3.33
-
Eu também não gostava de programar, achava que era coisa de maluco ou coisa só pra gênios. Eu sempre preferi a área gráfica e a área criativa do que a área lógica, eu fazia minha parte muito bem, mas sempre que chegava na parte lógica, eu ficava dependendo dos outros. Mas os outros sempre me decepcionavam. Demoravam demais para fazer coisas simples ou faziam tudo de maneira porca, fazendo até a minha parte ficar ruim. Diversas vezes pensei em desistir, mas fui com calma, aprendendo a lógica aos poucos, testando algumas coisas básicas, errando, ficando puto comigo mesmo, depois acertando e ficando satisfeito. A vida é assim, errando se aprende a fazer o certo. Caso queira aprender a lógica de programação, recomendo essa playlist no youtube: https://www.youtube.com/watch?v=8mei6uVttho&list=PLHz_AreHm4dmSj0MHol_aoNYCSGFqvfXV No começo é meio chatinho pois ele explica mais a parte teórica, mas é importante.
-
Cara, vc não deve esperar que os outros façam por você. Estude a Wiki, se vc não entende a Wiki então estude inglês. O que você quer fazer não é fácil para iniciantes. Quando eu estava começando eu também fazia assim, baixava alguns resources SIMPLES e tentava entender cada linha do script. Cada função eu verificava na Wiki para saber oq ela faz, algumas são óbvias pelo nome, mas outras nem tanto. Depois que eu sabia exatamente oq cada linha fazia, eu tentava recriar aquele resource do 0, mas sem copiá-lo. Pois como eu já sabia como ele funcionava e já sabia quais funções eram necessárias, facilitava bastante. Mas é claro, eu já tinha conhecimento em lógica de programação, sem a lógica de programação você não vai sair do lugar. Inclusive é a primeira coisa que você deve aprender antes de programar é a lógica de programação. Não é bug. Ele está dizendo que é impossível determinar o Ratio, pois não tem como dividir alguma coisa por 0. E também 0 não da pra dividir por alguma coisa.
-
Deixe os likes amanhã,
-
Fiz o painel GUI mais parecido com aquele seu exemplo, sem a parte do Ranking. client-side scoreWindow = guiCreateWindow (0.3, 0.2, 0.4, 0.6, "Ranking Kills/Death (by: LordHenry)", true) scoreGrid = guiCreateGridList (0, 0.05, 1, 0.85, true, scoreWindow) guiWindowSetSizable (scoreWindow, false) guiGridListAddColumn (scoreGrid, "ACCOUNT", 0.45) guiGridListAddColumn (scoreGrid, "KILLS", 0.13) guiGridListAddColumn (scoreGrid, "DEATHS", 0.13) guiGridListAddColumn (scoreGrid, "RATIO", 0.18) closeGrid = guiCreateButton (0.2, 0.91, 0.6, 0.09, "Fechar Painel", true, scoreWindow) guiSetVisible (scoreWindow, false) function scoreInfo (accounts, kills, deaths, ratio) guiSetVisible (scoreWindow, true) guiSetVisible (closeGrid, true) showCursor (true) if accounts then for i, v in ipairs (accounts) do guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], ratio[i]) end end end addEvent ("showRank", true) addEventHandler ("showRank", getRootElement(), scoreInfo) function clickOptions (button, state, absoluteX, absoluteY) if button == "left" then if source == closeGrid then guiSetVisible (scoreWindow, false) showCursor (false) guiGridListClear (scoreGrid) end end end addEventHandler ("onClientGUIClick", getRootElement(), clickOptions) function sendScores () if not guiGetVisible (scoreWindow) then triggerServerEvent ("getRank", localPlayer) end end addCommandHandler ("rank", sendScores)
-
Para verificar se alguém está em uma ACL Group, use isObjectInACLGroup. function verificarACL (thePlayer, cmd) local accName = getAccountName (getPlayerAccount (thePlayer)) if isObjectInACLGroup ("user."..accName, aclGetGroup ("Admin")) then outputChatBox ("Você está na ACL Admin.", thePlayer) else outputChatBox ("Você não está na ACL Admin.", thePlayer) end end addCommandHandler ("verify", verificarACL)
-
Você pode usar CreateBlipAttachedTo para criar os blips anexados aos jogadores. Para obter todos os jogadores online, use getElementsByType ("player") A parte do CreateBlip você deverá fazer client-side, senão os demais jogadores poderão ver os blips também.
-
É difícil sim. Realmente n sei como fazer desse jeito.
-
Cara, é só vc clicar duas vezes na coluna de Kills que ele já faz isso.
-
Também estou testando sozinho, por isso estou setando kills manualmente em mim mesmo usando setAccountData (getPlayerAccount(source), "kills", 3) no painel admin. O objetivo do rank eu não entendi. Pois se o cara tiver várias kills mas a death ainda maior, ele vai ser um jogador ruim em rank alto. Por outro lado, se contar somente o Ratio, um jogador novato pode ter rank maior que um jogador veterano. Realmente não sei qual a necessidade desse rank, sendo que vc pode clicar 2x na coluna de Kills da tabela e ele já vai organizar do maior pro menor em Kills.