Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Deixe false no último argumento de setElementData para desativar a sinc com cliente. Tirei um tempo pra fazer o código aqui, apenas siga a lógica e tente fazer o restante. E, não testei o código em nenhum momento, pode ser que tenha erros. local jogadores_no_interior local traficoaentrar = createMarker(125.20397186279,-285.93417358398,0.578125, "cylinder", 1.3, 255,0,0, 50) ----- Marker de Entrar local traficoasair = createMarker (2807.6264648438,-1174.2368164063,1024.5703125 , "cylinder" , 1.3 , 255,0,0 , 50) ----- Marker de Sair setElementInterior(traficoasair ,8) ---- Interior da Marker de Sair local marker_etapa1 = createMarker(...) local marker_etapa2 = createMarker(...) local marker_etapa3 = createMarker(...) do for _,m in ipairs({ marker_etapa1, marker_etapa2, marker_etapa3 }) do setElementInterior(m, 8) setElementDimension(m, 1) end end addEventHandler( "onMarkerHit", resourceRoot, function ( hitElement, dim ) if getElementType(hitElement) == "player" not isPedInVehicle(hitElement) and dim then if source == traficoaentrar then if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount (hitElement)), aclGetGroup ("Traficante")) then -- Se o jogador que colidir no marker for traficante, então: if jogadores_no_interior then return outputChatBox( "Já tem um jogador fabricando arma, aguarde um momento!", hitElement, 225, 50, 50 ) end -- setElementPosition (hitElement, 2807.8166503906, -1170.1173095703, 1025.5703125) setElementInterior (hitElement, 8) setElementDimension (hitElement, 1) setElementData( hitElement, "criarArma_etapa1", true, false ) jogadores_no_interior = true setTimer( -- definir um limite de tempo ao jogador que entrar no interior function( ) jogadores_no_interior = true -- teleportar o jogador pra fora onPlayerExitInterior( hitElement ) outputChatBox( "Fábrica de armas: seu tempo acabou!", hitElement, 225, 50, 50 ) end, 60000, 1 ) else outputChatBox ("Você não é um traficante!", hitElement, 255, 30, 30) end elseif source == traficoasair then setElementPosition (thePlayer, 125.05652618408,-279.69366455078,1.578125) setElementInterior (thePlayer, 0) setElementDimension (thePlayer, 0) jogadores_no_interior = false end end end ) function fabricarArma( thePlayer, cmd ) if cmd == "fabricar1" and isElementWithinMarker( thePlayer, marker_etapa1 ) and getElementData( thePlayer, "criarArma_etapa1" ) then if getPlayerMoney (thePlayer) >= 5000 then takePlayerMoney (thePlayer , 5000) toggleAllControls( thePlayer, false, true, false ) setPedAnimation (thePlayer, "ped", "WOMAN_walknorm") setTimer( function() toggleAllControls( thePlayer, true ) setPedAnimation( thePlayer ) setElementData( hitElement, "criarArma_etapa2", true, false ) removeElementData( hitElement, "criarArma_etapa1" ) outputChatBox ("[FabricarArmas] Você fabricou 30 modelos de AK-47." , thePlayer, 112, 128, 144) end, 30000, 1 ) else outputChatBox ("[FabricarArmas] Você não tem dinheiro para fabricar os modelos da AK-47.", thePlayer, 112,128,144) end elseif cmd == "fabricar2" and isElementWithinMarker( thePlayer, marker_etapa2 ) and getElementData( thePlayer, "criarArma_etapa2" ) then elseif cmd == "fabricar3" and isElementWithinMarker( thePlayer, marker_etapa3 ) and getElementData( thePlayer, "criarArma_etapa3" ) then end end addCommandHandler( "fabricar1", fabricarArma ) addCommandHandler( "fabricar2", fabricarArma ) addCommandHandler( "fabricar3", fabricarArma ) function onPlayerExitInterior( player ) setElementPosition (player, 125.05652618408,-279.69366455078,1.578125) setElementInterior (player, 0) setElementDimension (player, 0) removeElementData( player, "criarArma_etapa1" ) removeElementData( player, "criarArma_etapa2" ) removeElementData( player, "criarArma_etapa3" ) end addEventHandler( "onPlayerWasted", root, function() if getElementInterior(source) == 8 and getElementDimension(source) == 1 then jogadores_no_interior = false end end ) addEventHandler( "onPlayerQuit", root, function() if getElementInterior(source) == 8 and getElementDimension(source) == 1 then jogadores_no_interior = false end end ) local _removeElementData = removeElementData function removeElementData( ... ) local a = {...} if getElementData(a[1], a[2]) then return _removeElementData( ... ) end end Fiz uma variável que verifica quando existe alguém já dentro do interior, como você já disse no post acima, e também defini um tempo-limite de 1 minuto ao jogador para criar a arma.
  2. Mostre aqui como está seu código @Renazz
  3. Não reviva um tópico por favor, este tópico além do mais não tem nada relacionado com o seu problema. Não temos como te ajudar sem saber qual servidor você baixou e qual é esse "VIP", recomendo que peça ajuda ao criador.
  4. getElementColShape bindKey isElementWithinColShape guiSetVisible I recommend you to use createPickup on client-side as well.
  5. Entendi, acho que assim deve funcionar: function Job_Iniciar(thePlayer) if posicoes_caixas and type(posicoes_caixas) == "table" then -- verificar antes se existe a tabela for i, posicoescaixas in ipairs (posicoes_caixas) do if isElement(posicoescaixas) then destroyElement (posicoescaixas) posicoescaixas = nil end end end posicoes_caixas = { createObject (1221, 2785.559, -2408.001, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 1.2, -2408.001, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 2.4, -2408.001, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 3.6, -2408.001, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 4.8, -2408.001, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559, -2408.001 - 20, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 1.2, -2408.001 - 20, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 2.4, -2408.001 - 20, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 3.6, -2408.001 - 20, 13.634 -0.4, 0, 0, 180), createObject (1221, 2785.559 + 4.8, -2408.001 - 20, 13.634 -0.4, 0, 0, 180), } if isElement(Caminhao[thePlayer]) and isElement(Empilhadeira[thePlayer]) then destroyElement(Caminhao[thePlayer]) destroyElement(Empilhadeira[thePlayer]) Empilhadeira[thePlayer] = nil Caminhao[thePlayer] = nil end local caixa = createObject (1221, 2785.559, -2408.001, 13.634 -0.1, 0, 0, 180) Empilhadeira[thePlayer] = createVehicle(530, 2775.257, -2403.802, 13.792, 0.994, 0.046, 1.751) attachElements( caixa, Empilhadeira[thePlayer], 0, 0.6, 0.4) Caminhao[thePlayer] = createVehicle(456, 2768.087, -2418.615, 14.032, 0.224, -0.256, 98.052) Marker_Descarregar = createMarker (2773.011, -2417.931, 13.657 -1, "cylinder", 1.9, 20, 70, 230, 180) addEventHandler( "onMarkerHit", Marker_Descarregar, function ( hitElement ) if hitElement == caixa then -- código end end ) end addEventHandler("onMarkerHit", Job_Marker, Job_Iniciar) Edit: Deixe o script client-side, vai evitar conflito com outros player do server e sobrecarrega menos o servidor por fazer no cliente.
  6. Poderia explicar como o script funciona? Há um loop na tabela 'posicoes_caixas' antes da tabela ser definida. Também seria melhor definir a tabela fora da função e preferencialmente fazer o script client-side. Se tiver se referindo ao object da variável 'caixa', você pode criar a função do "onMarkerHit" dentro da própria função e depois só verificar o hitElement com a referência da variável.
  7. É melhor assim quando se utiliza várias vezes stopSound. Outra útil é pra função destroyElement: local _destroyElement = destroyElement function destroyElement( element ) if isElement(s) then return _destroyElement( element ) end end
  8. Você pode fazer adicionar isto no código @WeeD1: local _stopSound = stopSound function stopSound( s ) if isElement(s) then return _stopSound( s ) end end Vai evitar mensagens de erro quando parar o som.
  9. Mas a tela preta é por causa do fading da tela que tem no spawn do play.
  10. Faça uma função pro spawn/camera, é porque a função fadeCamera fica nesse resource.
  11. @GodKraken Seu código não ajuda em nada, esse trecho ao meu ver não expõe o problema mencionado. O que eu acho é que as tabelas dos itens estão sendo compartilhadas entre os jogadores em outra parte do código.
  12. I need this module too. Tried to compile the files but it failed.
  13. Você precisa fazer o salvamento, pode ser com setAccountData (método mais fácil) ou com banco de dados SQL; eventos onPlayerLogout/onPlayerQuit/onResourceStop. E o carregamento quando o jogador logar na conta (onPlayerLogin).
  14. Acho que você quer a mesma coisa que esse membro já postou:
  15. Desculpe a demora na resposta (tinha esquecido do post). Remova local na linha 17, deixa a variável global (ela já está local na linha 4).
  16. O post foi separado do antigo tópico para um tópico novo. @MrShadows Evite reviver tópicos antigos, e nesse caso o tópico revivido nem tinha nada a ver com seu post.
  17. Não tinha parado pra pensar nisso... então a função cancelEvent dentro do script protegido já vai ser uma função "fake" assim que carregar o código e a variável local _cancelEvent vai armazenar ela. Não tenho ideia de como, ou se, é possível pra resetar o ambiente de execução Lua ou funções. Isso iria proteger o script de outro malicioso. Dá pra verificar qual arquivo que chamou a função com debug.getinfo mas aí que tá o problema - essa função também poderia ser reescrita no outro script . A única solução que me vem à cabeça seria usar as funções xml pra ler e meta.xml e permitir apenas que 1 script seja carregado.
  18. Movido para Programação em Lua. Por favor, poste na seção correta da próxima vez - e veja este tópico: https://forum.multitheftauto.com/topic/114671-vídeo-tudo-sobre-este-fórum/
  19. Como então você conseguiu interferir naquela função cancelEvent local @MaligNos ? Foi foi só carregando o script malicioso antes no meta?
  20. https://www.tutorialspoint.com/lua/lua_functions.htm
  21. Uma dica é procurar pelo fórum algo similar. E ler tutoriais básicos pra saber por onde começar e como fazer as sintaxes para as funções postadas acima.
  22. Não sei se entendi bem, mas no memento em que eu crio aquela função local, isso vai tornar impossível modifica-lá por outro script sobrescrevendo, ela estará no mesmo escopo, no caso, no próprio script, será como uma função cancelEvent que não tem relação com das outras. Também dá, estando local ela só vai estar disponível no mesmo código mas ainda dá pra obtê-la com uma função Lua. Proteger desses métodos que mostramos aqui sim, nunca fiz algo do tipo mas você pode tentar fazendo uma versão que abrange todas funções do código e que tornam elas inacessíveis por funções sobrescritas (anulando variável/função na tabela Lua _G por exemplo), Ou utilizar loadstring + pcall para executar o trecho do código a ser protegido. Você também pode tentar fazer o código em seu próprio "ambiente", será mais fácil se você já tem uma noção de metatables + setfenv e outras demais funções. Obs: Também tem esta função do MTA que também pode vazar informações do código: https://wiki.multitheftauto.com/wiki/AddDebugHook (eu nunca testei então não sei dizer o quanto ela é eficaz). Edit Será que ainda dá pra acessar debug pela tabela Lua _G? Aí está algo a se testar... Edit² Na verdade essa função pode ser utilizada no MTA (isso até onde eu sei). -- Desculpem o excesso de quotes
  23. @Lord Henry Não é necessário descompilar pra conseguir executar o código, e o MaligNos já explicou o porquê. Faça um teste você mesmo. Aqui um exemplo: function enterVehicle ( player, seat, jacked ) cancelEvent( true ) outputChatBox ( "Veiculos bloqueados!", player ) end addEventHandler ( "onVehicleStartEnter", getRootElement(), enterVehicle ) Ok, esse código vai impossibilitar o jogador de entrar em qualquer veículo. Agora, eu crio outro script separado, exatamente assim: _cancelEvent = cancelEvent function cancelEvent() return _cancelEvent(false) end Resultado, a função cancelEvent lá dentro do outro código será sempre chamada dessa forma: cancelEvent(false) mesmo que outro valor seja passado. Agora, impedindo essa "interferência externa": local _cancelEvent = cancelEvent local function cancelEvent( ... ) return _cancelEvent( ... ) end function enterVehicle ( player, seat, jacked ) cancelEvent( true ) outputChatBox ( "Veiculos bloqueados!", player ) end addEventHandler ( "onVehicleStartEnter", getRootElement(), enterVehicle ) Aquele wrapper (assim que também é conhecido) no outro script não vai mais mudar nada nesse que o cancelEvent está local. Edit Esse código acima na verdade não vai impedir nada pois a esse ponto já irá receber a função reescrita. -- Até mesmo a variável que armazena a chave de proteção está vulnerável - isso porque existe a biblioteca Lua debug (além de _G), já mencionados. E essas funções estão habilitadas no MTA. Meio fora do assunto, mas há alguns anos atrás, um membro do fórum tinha conseguido obter a chave de encriptação utilizada internamente no MTA (procurei esse post, mas perece que já foi removido).
  24. Faça com getTickCount, um exemplo: local screen = { cImage = "/files/imagem1.png" } local imagensTotal = 2 -- quantas imagens no total irão mostrar na tela local id = 1 addEventHandler( "onClientResourceStart", resourceRoot, function() screen.tickStart = getTickCount() addEventHandler( "onClientRender", root, renderDXImage ) end ) function renderDXImage() if screen.cImage then if (getTickCount() - screen.tickStart) > 5000 then local id = id + 1 id = ( id > imagensTotal ) and 1 or id screen.cImage = "/files/imagem"..tostring(id)..".png" screen.tickStart = getTickCount() end dxDrawImage( x, y, w, h, screen.cImage ) end end
×
×
  • Create New...