-
Posts
3,992 -
Joined
-
Last visited
-
Days Won
183
Everything posted by Lord Henry
-
O Painel Não Quer Abrir Quando Passo Na Marker
Lord Henry replied to Hize's topic in Programação em Lua
Em nenhum momento vc está chamando o evento "open" do cliente. Você chamou o evento "open200" que nem existe no cliente. -
Dai depende de como o ID está salvo no jogador. Geralmente é por elementData, dai nesses casos vc pode fazer assim: function getPlayerFromID (id) for i, player in ipairs (getElementsByType ("player")) do if getElementData (player, "ID") == id then -- Supondo que o ID esteja salvo com a data de nome "ID". return player end end return false end
-
@+[T]rakin tente substituir o state == "down" por state == "up". Dessa forma a função só vai funcionar ao soltar o botão do mouse. Vc está usando painel em CEGUI ou DXGUI?
-
Você muda no gamemode play no arquivo broph.map
-
Substitua o _ do parâmetro de função por button. Ele representa o botão que foi usado. Se button == "left" então o botão usado foi o botão esquerdo. Você saberia disso se estudasse a wiki do onClientClick
-
source é quem recebe o dano. Em vez de usar source, use targetElem no lugar.
- 1 reply
-
- 1
-
-
Provavelmente o sistema bancário está setando e recebendo os valores direto por accountData, mas fica inviável ficar usando getAccountData em um onClientRender. É mais fácil vc usar setElementData em si mesmo na hora que for depositar ou sacar o dinheiro no banco, setando como data a nova quantidade de dinheiro que vc tem no banco. No script do HUD, verifica essa data somente quando ela muda usando onClientElementDataChange e salva ela numa variável. O HUD apenas mostrará o valor desta variável.
-
@Jonas^ - Brothers A diferença é que o getPlayerFromPartialName não precisa ser o nick exato do jogador, ele retornará o primeiro jogador que encontrar cujo nick tiver qualquer parte com essa string. Já o getPlayerFromName precisa informar o nick inteiro exato, caso contrário ele não encontra o jogador. Eu optei pelo getPlayerFromName nesse caso apenas pois eu não quis complicar usando função útil. Achei mais fácil pra ele entender usando a função nativa do MTA. Claramente se eu fosse fazer o script pra mim, usaria com o Partial. Se tem um jogador com o nick #00bfffLord, ocorre o seguinte: getPlayerFromName ("Lord") -- Retornará false. Não encontra o jogador. getPlayerFromPartialName ("Lord") -- Retornará o jogador, pois essa string existe dentro do nick dele. Mesmo se existir outro jogador com essa string também, retornará somente o primeiro jogador encontrado. getPlayerFromName ("#00bfffLord") -- Retornará o jogador. Pois o nick dele é igual a este. getPlayerFromPartialName ("#00bfffLord") -- Retornará o jogador. Pois essa string foi encontrada no nick dele (no nick inteiro).
-
Olá novamente mano. Vejo que vc está cometendo um pequeno equívoco na formatação de seu tópico. O texto da sua dúvida deve vim antes do código e não depois dele. Veja as regras aqui: https://forum.multitheftauto.com/topic/114671-vídeo-tudo-sobre-este-fórum/ Agora sobre a sua dúvida, você deve adicionar um comando ativador por meio do addCommandHandler e dai nos parâmetros dele você declara qual comando deseja usar (no caso é "level") e qual função será ativada com ele. Dai os valores que vc vai declarar depois do comando, você adiciona como parâmetros de função, da mesma forma que mostra a wiki. Exemplo: function levelComando (thePlayer, cmd, nick, nivel) -- thePlayer é o jogador que executou o comando. local jogador = getPlayerFromName (nick) -- a variável jogador recebe o player com este nick, será false se não existir. if jogador then -- Se existe um jogador com o nick informado, então: setElementData (jogador, "Level", tonumber (nivel) or 0) -- Seta o level nesse jogador (converte o nível de texto pra número antes de setar no jogador, se não for possível converter pra número, seta level 0 no jogador) outputChatBox ("Level setado com sucesso: "..getElementData (jogador, "Level"), thePlayer, 0, 255, 0) else -- Se não existe um jogador com o nick informado (se o nome tem códigos de cores, vc deve colocar também) outputChatBox ("Nenhum jogador com o nick informado foi encontrado.", thePlayer, 255, 0, 0) end end addCommandHandler ("level", levelComando) -- /level nickExato 100
-
Quando tiro a Acl interferir o Script - Ajuda
Lord Henry replied to TavinhoMTA's topic in Programação em Lua
function Verificar_Emprego_Atual ( ) for i, player in ipairs(getElementsByType("player")) do if not getElementData ( player, "Emprego" ) then setElementData ( player, "Emprego", "Mecanico" ) end end end setTimer ( Verificar_Emprego_Atual, 5000, 0 ) Não entendi a lógica do seu script. Mas removi as linhas e condições relacionadas com ACL e account do jogador. -
Quando tiro a Acl interferir o Script - Ajuda
Lord Henry replied to TavinhoMTA's topic in Programação em Lua
Inclusive pra quem estiver deslogado? -
Quando tiro a Acl interferir o Script - Ajuda
Lord Henry replied to TavinhoMTA's topic in Programação em Lua
Vc quer tirar a ACL pra funcionar pra todo mundo? -
Estude essas funções: createMarker onMarkerHit getElementType destroyElement Se vc não consegue criar um script a partir das funções, então vc precisa estudar lógica de programação. Recomendo este tutorial: https://www.youtube.com/watch?v=M2Af7gkbbro&list=PLHz_AreHm4dmSj0MHol_aoNYCSGFqvfXV&index=2&t=20 Infelizmente não posso te dar código pronto se vc não souber lógica de programação, pois vc apenas vai dar Ctrl+C e Ctrl+V sem aprender nada. E da próxima vez não faça Spam no fórum com este mesmo tópico. Regras do fórum:
-
Eu criaria um carrinho RC indestrutível e invisível anexado no porta-malas e dai colocaria o player nesse carrinho. O carrinho irá acompanhar a rotação da viatura.
-
Cara, isso é fácil resolver. Pelo menos da pra fazer igual aquela print que vc mandou como objetivo. Só fazer o retângulo roxo mais fino e mais em baixo. Se não é isso que vc quer, então ninguém sabe oq vc quer. local sx, sy = guiGetScreenSize() local x = sx/1366 local y = sy/768 function DNL_Hud() for _, component in ipairs( components ) do setPlayerHudComponentVisible( component, false ) end dxDrawRectangle(x*835, y*40, x*521, y*34, tocolor(32, 32, 33), false) -- Background dxDrawRectangle(x*835, y*75, x*521, y*6, tocolor(150, 16, 148), false) -- linha roxa dxDrawLine(x*835, y*74, x*1356, y*74, tocolor(0, 0, 0), x*2, false) -- linha horizontal dxDrawLine(x*998, y*73, x*998, y*40, tocolor(0, 0, 0), x*1, false) -- linha vertical 1 dxDrawLine(x*1170, y*73, x*1170, y*40, tocolor(0, 0, 0), x*1, false) -- linha vertical 2 end addEventHandler ("onClientRender", root, DNL_Hud)
-
Eu faria por variável. Se tal variável for 1, dai deixa a primeira skin selecionada, senão se for 2, deixa a segunda selecionada e assim por diante. Quando vc apertar pra baixo, aumenta essa variável em +1, fazendo a seleção ir pra próxima skin. Na função que faz os dxDraw do painel, coloque as condições que verificam o valor da variável. Dai dependo desse valor, faz dxDraw de seleção na skin específica.
-
Isso não é bug. É normal acontecer isso. Experimente bater seu veículo e depois setar a vida dele em 1000 sem usar a função fixVehicle. Ele vai ficar com a vida cheia mas vai continuar amassado. O mesmo acontece se vc cancelar o dano no veículo sem blindá-lo com setVehicleDamageProof. Vai amassar normalmente mas não vai diminuir a vida.
-
Sim, isso se faz com bindKey. Vc anexa a função que faz a seleção ir pra baixo na tecla "arrow_d".
-
Já tentou bindKey? Dai vc anexa a função que aconteceria se você clicasse. Em vez de vc usar onClientClick, vc usa a tecla bindada para chamar tal função.
-
Também não entendi oq vc quer fazer. Você quer fazer a navegação do seu menu DX pelas setas do teclado em vez de clicar, é isso?
-
Ah, por isso então. Na sua linha 14 ele está dando nil pois ele está tentando pegar a variável local da outra função, mas por ser local ela não existe fora de seu escopo. Faça Kits ser local também na linha 14. local Kits = tonumber(getElementData(localPlayer, "Kit")) or 0
-
Mas ele está considerando Kits como nil. No entanto a condição nil or 0 deveria resultar em 0. Testei aqui e ele está funcionando normal. Mesmo sem a data, ele considera como 0. function DeltaSCRFix () if getPedOccupiedVehicle(localPlayer) then Kits = tonumber(getElementData(localPlayer, "Kit")) or 0 print ("Kits = "..tostring(Kits)) if Kits > 0 then setElementData(localPlayer, "Kit", Kits -1) outputChatBox ("╔═════════════════════════════════════════════════╗", 200, 50, 0) outputChatBox ("INFO: #FFFFFFVocê usou seu Kit de Reparo com Sucesso.", 200, 50, 0, true) outputChatBox ("INFO: #FFFFFFVocê agora tem mais "..Kits.." usos.", 200, 50, 0, true) outputChatBox ("╚═════════════════════════════════════════════════╝", 200, 50, 0) end end end addCommandHandler ("seguro", DeltaSCRFix) O que provavelmente está acontecendo é que vc está anulando a variável global Kits em outra parte do código. Pois vc não está usando variável local.
-
Bem estranho... Era pra Kits ser igual a 0 em caso de falha do tonumber...
-
Na linha 4?
-
onPlayerLogin - Carrega os dados da conta dele com getAccountData. onPlayerLogout - Salva os dados na conta dele com setAccountData. Mas essas funções são server-side, vc precisará de triggers.