Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,005
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Também acho. Mas a parte de automatizar e-mail parece ser complexa. Ta aí uma área que não possuo conhecimento algum, que seria essa comunicação de dados "OFF MTA".
  2. Cria ela no onClientResourceStart e depois oculta com guiSetVisible. Dai só volta a mostrar pra quem for abrir o painel.
  3. Então, dai vc precisa de um triggerServerEvent e lá no server, fazer um triggerClientEvent no cliente desse outro cara. É necessário passar o nome do jogador selecionado por parâmetro, dai o server faz o esquema de verificar se o jogador existe com aquele nome, se existir manda o triggerClientEvent pra ele, abrindo o painel nele.
  4. Isso é client-side, amigo. Só vai acontecer em todos os clientes se no seu triggerClientEvent vc não especificar qual client quer ativar o evento. Quando alguém clica em um botão num painel, a função que aquele botão ativar no client só vai pra ele. A não ser que vc use um triggerServerEvent pra enviar pra geral via server-side. Geralmente vc não precisa declarar o jogador em uma função client-side, pois ela só vai pro localPlayer.
  5. Mas é pra isso mesmo que ela serve. Mostrar a janela (true) ou ocultar a janela (false).
  6. Só usar setSoundVolume no jogador pra aumentar a voz dele.
  7. Aí vc já está pensando "fora da casinha" mano. O que o painel admin faz é dar startResource, que é uma função nativa do MTA que inicia um resource. Você obrigatoriamente vai precisar usar essa função em algum momento para ativar um resource. Vc usando comandos ou não, vai usar a função em algum momento. Se vc bloquear essa função, o resource nunca será ativado. O fato de usar um comando "secreto" para ativar o resource não muda em nada, comandos são facilmente vazáveis.
  8. Verifique a ACL Group do usuário por meio da função isObjectInACLGroup. Qualquer resource de TAGs já faz isso, basta saber colar no seu código de chat.
  9. @#DeltaSCR Arrume a indentação, pra começar. Depois faça assim: addEventHandler("onClientResourceStart", resourceRoot, function () playersList = guiCreateGridList (0.30, 0.28, 0.11, 0.49, true) -- Gridlist com tamanho e posição relativa não é recomendável. local column = guiGridListAddColumn (playersList, "Jogadores", 0.9) if (column) then for _, player in ipairs (getElementsByType("player")) do guiGridListAddRow (playersList, string.gsub (getPlayerName(player), "#%x%x%x%x%x%x", "")) -- Adiciona os nomes dos jogadores sem código #hex. O getPlayerName não funcionará mais neste caso, pois o nome precisa ser exato com os códigos de cor. Usa-se getPlayerPartialName em vez disso. end end guiSetAlpha (playersList, 0.8) guiSetVisible (playersList, false) end) function createCEGUI () theWindow = guiCreateWindow (0.27, 0.23, 0.45, 0.53, "Companhia Telefonica TSB", true) guiWindowSetMovable (theWindow, false) guiWindowSetSizable (theWindow, false) --// EDITS memoChat = guiCreateMemo (0.02, 0.08, 0.96, 0.78, "\n", true, theWindow) editText = guiCreateEdit (0.02, 0.89, 0.97, 0.08, "Digite sua mensagem aqui...", true, theWindow) end function DeltaSCR_Click (button, state, absoluteX, absoluteY) if button ~= "left" or state ~= "down" then return end -- Se o botão usado para o clique não for o esquerdo ou o botão não estiver sendo apertado, então nada acontece. local row = guiGridListGetSelectedItem (playersList) -- row recebe o índice da linha selecionada, sendo 0 se for a primeira linha, 1 se for a segunda e assim por diante. if row >= 0 then -- Se existe algum item selecionado, então: (row = -1 se nenhum item estiver selecionado) local namePlayer = guiGridListGetItemText (playersList, row, 1) -- Recebe o texto do item que estiver na primeira coluna do item selecionado. local thePlayer = getPlayerFromPartialName (namePlayer) -- É necessário função útil para isso funcionar, pois namePlayer não tem os códigos de cores. -- SEU CÓDIGO AQUI. end end addEventHandler ("onClientGUIClick", playersList, DeltaSCR_Click, false) -- Estava errado playerList, sem o S function getPlayerFromPartialName (name) -- Função útil. 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 Hahauahauahuahuhauahua
  10. Vai dar erro na linha 15. playerList, row e column não foram declarados em lugar nenhum.
  11. Sobre viver de scripts... Depende o quanto de renda vc considera o suficiente para viver. Também depende do seu nível de conhecimento, para conseguir criar vários tipos de resources diferentes, com mais qualidade e que funcionem sem problemas. Outra variável a ser levada em consideração é sua rede de clientes e quantos serviços simultâneos vc é capaz de fazer ao mesmo tempo, sem abandonar os clientes já existentes. Tudo é um grande DEPENDE. Na minha opinião, não dá pra viver de scripts. Pelo menos não como renda única. Levando em conta a situação financeira do país atualmente, etc. e também o fato de que o MTA não vai existir para sempre, sabemos que o auge do MTA já passou, a comunidade está cada vez mais migrando para os jogos mais novos. Enfim, é minha opinião levando em conta esses fatores. O máximo que vc puder sem se cansar demais. Faça um teste, comece estudando menos horas e nas semanas seguintes vc aumenta o tempo. Quando vc perceber que a partir de certo ponto vc fica cansado demais para aprender, dai vc mantém aquela quantidade limite de horas. Varia de pessoa pra pessoa.
  12. Olá, vou deixar minha opinião também, apesar do atraso. Os sites são bons, oficiais e confiáveis. O primeiro link está na versão errada. O MTA usa a versão LUA 5.1 e não a 5.2 que vc está lendo. Esse primeiro site é mais voltado para a linguagem LUA pura (vale lembrar que LUA é uma linguagem de programação inventada por brasileiros \O/ por isso que eles disponibilizam o manual em português). Muitas coisas dali vc usa no MTA, principalmente as funções matemáticas, as funções de manipulação de tabelas e as funções de manipulação de strings (cadeias de caracteres). Vale lembrar que para entender o que está escrito lá, vc já deve ter conhecimento avançado com lógica de programação (ou algoritmos computacionais). Caso ainda seja novato nesse assunto, recomendo estas videoaulas no YouTube sobre Algoritmos. O segundo link é a Wiki do MTA. Existem algumas páginas em português mas a maioria é em inglês, então sem inglês não rola de entender a Wiki e muito menos usando tradutor. Sem inglês vc não consegue nada no ramo da tecnologia, simples assim. Esse site é mais voltado para as funções nativas do MTA (como CreateVehicle por exemplo) e também algumas funções úteis inventadas pelos usuários para facilitar nossas vidas (como por exemplo DxDrawBorderedText). A vantagem da Wiki é que ela também mostra exemplos prontos das funções em uso. Sendo assim vc consegue entender perfeitamente o que cada função faz e como usá-las.
  13. Eu prezo pela otimização acima de tudo. Se for pras coisas serem mais bonitas, vou pro GTA 5 de uma vez. Mas ta ok, vc que sabe.
  14. Era mais fácil fazer tudo direto em CEGUI, hauahauhauahau Vc ta usando 70% do painel em CEGUI já.
  15. Isso só funciona em elementos CEGUI. Se vc estiver criando botões em DX, não vai funcionar. Óbvio. Todo evento precisa de uma função para ativar. Caso contrário não existe motivo para declarar este evento, já que ele não ativa função alguma.
  16. Isso é positivo pra qual parte? A do scripter ilegal ou do DX?
  17. Opa, parece que temos algumas suspeitas de scripter ilegal. Vamos chamar nossa equipe do Xerox Holmes pra dar uma investigada. @#DeltaSCR o painel todo é feito em DX mas o campo de digitar a mensagem é em CEGUI, é isso?
  18. Não sei sé é possível fazer isso que vc quer. Vc está querendo fazer algo complexo sem nem saber lógica de programação direito, estude mais antes de continuar. Além disso, a câmera possui um limite de distância de sincronização, isso significa que quando um objeto fica mais distante da câmera do que esse limite, ele para de ser sincronizado e qualquer movimento que ele esteja fazendo irá cessar. (Ao se aproximar do objeto, ele continuará o movimento). As balas das armas funcionam diferente de objetos, principalmente a bala da Sniper, que possui um maior alcance inclusive para abater alvos que estão fora da zona de sincronização da câmera. O que daria pra fazer seria um cálculo de distância da coordenada onde a bala colidiu e o player que atirou, mudando o valor Z da posição com base nessa distância, mas ainda sim, não sei como faria para "alterar" esse local de hit da bala, uma vez que o tiro já foi dado.
  19. Also, line 4 is client-side addEventHandler("onClientResourceStart", resourceRoot, initBind) The variable localPlayer is also client-side.
  20. Testei aqui também e funcionou. Verifique se vc está na dimensão 0, perto de onde o Ped é criado (Groove Street) e execute o comando /ped
  21. Pq vc colocou no meta o tipo client mas o script é server. Dai não vai funcionar mesmo.
  22. @SchmidtNeO saiba mais sobre o meta.xml na Wiki. Já respondi seu outro tópico lá.
×
×
  • Create New...