-
Posts
4,006 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
Não entendi direito, poderia ser mais claro? Alguns resources exigem que vc tenha outros resources de suporte instalados para funcionar, por exemplo o dxmessages. Ative o /debugscript 3 e verifique se o seus resources estão com erros. E da próxima vez poste na seção correta de Programação em Lua.
-
Não precisa. Só obter o elemento caminhão e o elemento carro que já funciona. O attachElements não pede coordenadas, apenas offsets caso o usuário ache necessário.
-
Script venda de drogas com painel [Ajuda dxprogressbar]
Lord Henry replied to Mopped's topic in Programação em Lua
Deve ter aparecido um símbolo invisível quando vc copiou do fórum. Delete e reescreva a linha 70. Se o problema persistir na linha 71, faça o mesmo na linha 71. -
Acho que esse tópico deveria estar na seção de Ajudas Relacionadas ao MTA:SA (Cliente/Servidor) e não no Offtopic. Parece que vc mexeu nas configurações do servidor local de editor de mapas (editor.conf) e ele não está mais iniciando os resources essenciais para funcionar adequadamente. Ocorre geralmente quando o usuário vai criar um servidor local mas não tem experiência com os arquivos de configuração. Dai em vez de configurar o mtaserver.conf, mexe nos outros arquivos que não deveria.
-
Script venda de drogas com painel [Ajuda dxprogressbar]
Lord Henry replied to Mopped's topic in Programação em Lua
Vai precisar da função útil dxDrawProgressBar e um interpolateBetween. function onClientClick(button, state) if isEventHandlerAdded("onClientRender", root, onClientRender) and isEventHandlerAdded("onClientClick", root, onClientClick) then if button == "left" and state == "up" then if isMouseInPosition(x*730, y*570, x*151, y*33) then triggerServerEvent("comprarCocaina", resourceRoot) elseif isMouseInPosition(x*489, y*570, x*151, y*33) then start = getTickCount() -- Salva o momento atual para usar no cálculo do progresso da interpolação. addEventHandler("onClientRender", root, interpolationRender) -- Inicia a interpolação. elseif isMouseInPosition(x*843, y*168, x*918, y*234) then showCursor(false) removeEventHandler("onClientRender", root, onClientRender) removeEventHandler("onClientClick", root, onClientClick) end end end end -- Está faltando evento ativador da função acima. E você não deve usar nomes de eventos como nome das funções. function interpolationRender() local now = getTickCount() -- A cada frame, pega o momento atual. local endTime = start + 3000 -- Duração dessa interpolação: 3 segundos. (momento do final = início + 3 segundos) local elapsedTime = now - start -- Tempo que já passou neste frame: momento de agora - momento que começou local duration = endTime - start -- Duração total da interpolação: momento do final - momento que começou local progress = elapsedTime / duration -- Progresso atual da interpolação: tempo que já passou dividido pela duração (pois o progresso é de 0 até 1) if (progress > 1) then -- Quando concluir a barra, para de renderizar ela e ativa o trigger. removeEventHandler ("onClientRender", root, interpolationRender) start = nil return triggerServerEvent ("comprarMaconha", resourceRoot) end local barra = interpolateBetween (0, 0, 0, 100, 0, 0, progress, "Linear") -- barra vai de 0 até 100 dependendo do progresso atual. dxDrawProgressBar (10, 10, 200, 200, barra, tocolor (250, 50, 50, 255), tocolor (255, 255, 255, 255)) -- Barra aleatória, arrume a posição e tamanho dela para o seu script. end local unlerp = function(from,to,lerp) return (lerp-from)/(to-from) end function dxDrawProgressBar( startX, startY, width, height, progress, color, backColor ) -- Função útil. local progress = math.max( 0, (math.min( 100, progress) ) ) local wBar = width*.18 for i = 0, 4 do --back local startPos = (wBar*i + (width*.025)*i) + startX dxDrawRectangle( startPos, startY, wBar, height, backColor ) --progress local eInterval = (i*20) local localProgress = math.min( 1, unlerp( eInterval, eInterval + 20, progress ) ) if localProgress > 0 then dxDrawRectangle( startPos, startY, wBar*localProgress, height, color ) end end end -
Já usou /debugscript 3 para ver se há erros? (não precisa dar Quote em mim se só tem eu aqui na conversa, vc só usa quando tem resposta de várias pessoas)
-
Como está o save-system que vc estava usando?
-
addCommandHandler("testar", function() start = getTickCount() -- Salva o momento atual para usar no cálculo do progresso da animação. addEventHandler("onClientRender", root, interpolationRender) -- Inicia a primeira animação. setTimer (function () -- Depois de 5 segundos, inicia a outra animação. start2 = getTickCount() -- Salva o novo momento atual para usar no cálculo da outra animação. Não pode usar o start pois ele pertence a primeira animação. addEventHandler("onClientRender", root, interpolationRender2) end, 5000, 1) setTimer (function () -- Depois de 10 segundos, para de renderizar tudo. removeEventHandler("onClientRender", root, interpolationRender) removeEventHandler("onClientRender", root, interpolationRender2) start = nil start2 = nil end, 10000, 1) end) function interpolationRender() local now = getTickCount() -- A cada frame, pega o momento atual. local endTime = start + 3000 -- Duração dessa animação: 3 segundos. (momento do final = início + 3 segundos) local elapsedTime = now - start -- Tempo que já passou neste frame: momento de agora - momento que começou local duration = endTime - start -- Duração total da animação: momento do final - momento que começou local progress = elapsedTime / duration -- Progresso atual da animação: tempo que já passou dividido pela duração (pois o progresso é de 0 até 1) if (progress > 1) then -- Impede de repetir a animação depois que ela concluir, mantendo o progresso em 1 se ele for maior. progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "OutElastic") -- Y vai de 0 até 165 dependendo do progresso atual. dxDrawImage(184, y, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- Draw a imagem com o valor do Y. end function interpolationRender2() local now = getTickCount() local endTime = start2 + 3000 -- Mesma coisa que o de cima, mas usa o start2 para os cálculos. local elapsedTime = now - start2 local duration = endTime - start2 local progress = elapsedTime / duration if (progress > 1) then progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "InElastic") -- Esse efeito não parece fazer sentido. Mas está funcionando. dxDrawImage(184, y, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end
-
Preciso de ajuda
Lord Henry replied to Taigas's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Ele apenas aparece entre os 20 primeiros servidores quando o jogador clica em Internet e não tiver nenhum filtro de nome aplicado. Isso não garante que vai chamar players, só dá mais visibilidade ao servidor. Você até pode conseguir mais players, mas eles logo abandonarão o servidor se ele for ruim. Eu por exemplo nem olho a aba Internet, vou direto pros favoritos. Só olho na aba Internet quando estou procurado um servidor novo pra jogar. -
NAO CONSIGO ATUALIZAR.
Lord Henry replied to Isabor's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Se baixar o MTA de novo não funcionar, entre em contato com os caras do servidor Groove Street, pois é um problema com o servidor deles. -
Vou supor que esteja com um evento "onClientRender" nessa sua função.
-
Ta faltando parte do código. Isso que vc mandou só funciona dentro de uma função renderizadora.
-
Mostre o que vc tentou fazer.
-
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Acabei escolhendo a primeira alternativa. Vários eventos diferentes sem allowRemoteTrigger, cada um em seu resource de veículo. Motivo: O server-side do painel obtém todos os resources com getResources e passa um loop FOR entre todos eles, verificando pelo nome quais deles são de veículos. Os resources que forem de veículos, ele salva seus dados (nome, estado de ativação, ID do veículo) numa table temporária. (até então, não ocorre nenhum trigger nos resources, ele apenas verifica os nomes. O estado ele pega com getResourceState e o ID ele pega com os 3 primeiros caracteres do nome do resource.) Depois de terminar o loop, passa a table pro client-side do painel no seguinte formato: --[[ Supondo que existam os seguintes resources de veículo: 240TaxiBoladao [running] No meta.xml: <info name="Taxi Boladão" /> 541-1966Ford-GT [running] No meta.xml: <info name="Ford GT" /> 431onibus_espacial [loaded] No meta.xml: (não existe o parâmetro name) 490RangeRover(Sport) [failed] No meta.xml: <info name="Range Rover (sport)" /> ]] tableResources = { [240] = {"Taxi Boladão", true}, [541] = {"Ford GT", true}, [431] = {"", false}, [490] = {"Range Rover (sport)", false} } Com a table no cliente, ele verifica o ID que aparece no item da lista que o usuário clicou. Se o ID estiver nessa table, manda o trigger pro evento "renableVeh"..id" onde o ID veio da table. Se eu fosse fazer do outro jeito, ele ia ativar todos os eventos dos veículos a cada clique.- 13 replies
-
- 1
-
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
Não. Tem erro de indentação também. E está faltando um end no final.
-
Erro na linha 3. player não foi declarado em lugar nenhum.
-
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Pois é... Qual deles é mais leve? Adicionar 1 evento global com allowRemoteTrigger ou adicionar vários eventos diferentes sem allowRemoteTrigger? Existe alguma forma de testar performance? Sem ser em um servidor cheio de players.- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
version 1.6 How to use a function that only exists in the future?
Lord Henry replied to Lord Henry's topic in Scripting
I know. I was the one who marked the deletion. Before my edit, the page doesn't mark the function disabled. (see page history) (now was fixed to disabled instead of deletion) -
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Edit: (o tempo pra permitir edição deveria ser maior) Segundo exemplo corrigido: -- (painel) [client-side] addEvent ("nomeEventoGeral", true) triggerEvent ("nomeEventoGeral", root, 000) -- ID do veículo que eu supostamente já sei. -- (resource do veículo) [client-side] addEventHandler ("nomeEventoGeral", root, function (ID) if (ID == 000) then -- Ativa/Desativa veículo. end end)- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Não entendi porque que não fez sentido. Se eu afirmei que precisaria do server-side para obter os resources e verificar os nomes. Em momento nenhum eu disse que usaria exports em um resource aleatório. Você deve estar achando que eu estou dando exports em todos os resources até achar o evento certo, é isso? Não uso getResourceFromName pois não sei o nome dos resources. Eu apenas obtenho todos eles com getResources e depois verifico um por um com loop. O getResourceState já estou usando pois o painel diferencia os resources ligados e os desligados. Se o resource estiver desligado, ele nem tenta chamar o evento dele. @DNL291 fiquei meio confuso em meio as mensagens. Só pra confirmar, os dois métodos que vc falou são respectivamente esses? (corrija-me se estiver algo errado) 1. triggerEvent no resource do painel, que vai ativar os eventos criados nos resources pelo addEvent e com addEventHandler. Mas precisa saber os nomes dos eventos de cada resource, ex: ID do veículo junto do nome -- (painel) [client-side] triggerEvent ("nomeEvento000", root, parametros) -- 000 seria o ID do veículo que eu supostamente já sei. -- (resource do veículo) [client-side] addEvent ("nomeEvento000", true) addEventHandler ("nomeEvento000", root, function (parametros) -- Ativa/Desativa veículo. end) 2. addEvent no resource do painel, com parâmetro de allowRemoteTrigger = true e com triggerEvent que irá acioná-lo nos outros resources com addEventHandler. -- (painel) [client-side] addEvent ("nomeEvento000", true) triggerEvent ("nomeEvento000", root, parametros) -- (resource do veículo) [client-side] addEventHandler ("nomeEvento000", root, function (parametros) -- Ativa/Desativa veículo. end) Eram essas as alternativas?- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
@Poderoso da próxima vez use o botão <> do fórum para postar seu código junto com a formatação correta de Lua. Seu código está faltando um end no final. Use o /debugscript 3 para ver possíveis erros de sintaxe. Testei aqui e ele está funcionando (com a correção do end). Só que precisa chegar bem perto pois o valor padrão de distância é baixo.
-
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Pois é. Mas qual delas é a mais leve? Se tratando de varias chamadas simultâneas. Para preencher a lista do painel com os status dos resources, estou usando um loop FOR que vasculha todos os resources e detecta quais são mods de veículos. Quando encontra um, chama um evento exportado dele para obter o status de ativação do resource no cliente. (O resource pode estar ativado mas o veículo desativado no cliente específico).- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
Não tem. Pelo menos não de maneira leve.
-
resource controller Qual destes métodos é mais otimizado?
Lord Henry replied to Lord Henry's topic in Programação em Lua
triggerEvent funciona para eventos de outros resources? A princípio também achei que não precisaria mais da parte server-side usando exports. Mas depois de uns testes, descobri que não terá como eliminar a parte server-side, pois preciso dele para obter os nomes dos resources de veículos. A função client-side só é capaz de obter o próprio resource.- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with: