![](https://forum.multitheftauto.com/uploads/set_resources_22/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
[M]ister
Members-
Posts
444 -
Joined
-
Last visited
-
Days Won
3
Everything posted by [M]ister
-
Obviamente... a não ser que você priorize facilidade na codificação ao invés de um bom desempenho do script na máquina/rede.
-
https://forum.multitheftauto.com/search/?q=download&type=forums_topic&nodes=127 Você quem escolhe, pois dá para fazer nos dois.
-
Exemplo de uso (server-side) local capacetes = {} addCommandHandler("capa1", function(player) if (not capacetes[player]) then -- se não possuir capacete --[[ -- adiciona capacete capacetes[player] = createObject(capa1, 0, 0, 0, 0, 0, 0) exports.bone_attachCapa:attachElementToBone(capacetes[player], player, 1, 0, 0.04, 0.07, 0, 270, 0) --]] end end ) addCommandHandler("tirar", function(player) if (capacetes[player]) then -- caso possua capacete --[[ -- remove capacete if (exports.bone_attachCapa:isElementAttachedToBone(capacetes[player])) then exports.bone_attachCapa:detachElementFromBone(capacetes[player]) end destroyElement(capacetes[player]) capacetes[player] = nil --]] end end ) É bom também efetuar a destruição do objeto no onPlayerQuit do player
-
Acabei de testar aqui e funcionou... mas notei que a altura que você definiu para o colshape está muito pequena (1), e com isso não estava detectando os elementos, só aumentar um pouco que provavelmente funcionará.
-
Tente: local vZones = { {x = 190, y = -489, z = 980, width = 65, depth = 60, height = 1}, } local z = {} function initvZones() if vZones and #vZones ~= 0 then for _,v in ipairs (vZones) do if v then if v.x and v.y and v.z and v.width and v.depth and v.height then local c = createColCuboid (v.x, v.y, v.z, v.width, v.depth, v.height) setElementDimension(c,100) if c then z[c] = true for _,veh in ipairs (getElementsByType("vehicle")) do if (getElementDimension (veh) == 100) then if isElementWithinColShape (veh, c) then destroyElement(veh) end end end addEventHandler ("onElementDestroy", c, function() if z[source] then z[source] = nil end end) addEventHandler ("onColShapeHit", c, function (h, d) if h and isElement(h) and getElementType (h) == "vehicle" and d then destroyElement(h) end end) end end end end end end addEventHandler ("onResourceStart", resourceRoot, initvZones)
-
Pode verificar o isConsoleActive Cliente: local consoleActive = false addEventHandler("onClientRender", root, function() if (consoleActive ~= isConsoleActive()) then consoleActive = isConsoleActive() setElementData(localPlayer,"consoleActive",consoleActive) end end ) Server: addEventHandler("onPlayerCommand", root, function(cmd) if (cmd ~= "say") then return end if getElementData(source,"consoleActive") then cancelEvent() outputChatBox("*Uso inválido!", source, 255, 0, 0) end end )
-
Dúvida sobre external HTTP
[M]ister replied to Mopped's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Existe também o Nginx para Windows: http://nginx.org/en/docs/windows.html O correto não é copiar os arquivos do http-client-files para o diretório(padrão) do servidor web, mas sim configurar para que tal requisição http seja direcionada ao diretório http-client-files... desse modo você não teria que se preocupar com possíveis divergências de arquivos entre o servidor de MTA e seu sistema de download... procure por DocumentRoot e Directory no arquivo de configuração do Apache, e troque pelo endereço do http-client-files E para desabilitar a listagem dos diretórios, procure por “Options Indexes", e então remova esse Indexes (Apache) Se usar o Nginx, muitas opções serão semelhantes ao tutorial da WIKI -
Não tem como definir as propriedades para jogadores específicos, mas dá para separar com base nas habilidades... por exemplo, todos os jogadores da acl Admin você define com a habilidade “pro” (definindo o norecoil) e todos os demais jogadores em outra categoria: “std” ou “poor” (sem definir o norecoil). Veja: setPedStat / onPlayerLogin / isObjectInACLGroup
-
Na realidade tem que baixar de novo sim, pois é salvado na RAM... só não sei se é apagado quando desconecta do servidor ou na falta de energia.
-
Se tú não liga para desempenho, pode usar o onPlayerCommand addEventHandler("onPlayerCommand",root, function(command) for i,gate in pairs(getElementsByType("object")) do if getElementData(gate,"BaseGate") then local baseName = getElementData(gate,"baseName") if isPlayerAllowed(source,gate) then if getElementData(gate,"pass") == command then --- funções que abre o portão end end end end end )
-
Ajuda a criar Marker de destruir Veiculo
[M]ister replied to ytjuliocesar's topic in Programação em Lua
Lá na última linha tá destroyElement, troque por DestroyMarker (confundi quando reescrevi o trecho) -
Ajuda a criar Marker de destruir Veiculo
[M]ister replied to ytjuliocesar's topic in Programação em Lua
Tente usar esse: function DestroyMarker(source) if isElementWithinMarker(source, destroyM) then local veiculo = getPedOccupiedVehicle (source) if (veiculo) then destroyElement(veiculo) end end end addCommandHandler("destruir", destroyElement) Se não der, apague o arquivo, crie um novo e tente reescrever de novo, pois o código em si está ok. -
Se não me engano, existe animações em que é possível andar normalmente enquanto executa, talvez esse seja o caso... mas ai se a animação que você quer, não seja a que é possível andar, pode tentar coloca-la no lugar de alguma que pode: engineLoadIFP
-
Ajuda a criar Marker de destruir Veiculo
[M]ister replied to ytjuliocesar's topic in Programação em Lua
Já ouvi comentários de um tal bug quando copia e cola o código, tente ao invés de copiar, reescrever o código como está aqui. -
Ajuda a criar Marker de destruir Veiculo
[M]ister replied to ytjuliocesar's topic in Programação em Lua
Na realidade o ponto chave de aprender é tentar! function DestroyMarker(source) if isElementWithinMarker(source, destroyM) then local veiculo = getPedOccupiedVehicle (source) if (veiculo) then destroyElement(veiculo) end end end addCommandHandler("destruir", DestroyMarker) Não entendi o que tú quer fazer com aquela tabela veh, então deixei de acordo com o que foi descrito no tópico. -
Como ter 2 carros diferentes na mesma dff ao mesmo tempo
[M]ister replied to Tec's topic in Programação em Lua
Infelizmente sim, embora na wiki não informe, existe essa limitação: LINK Na arma também não tem como, o que fazem é uma “gambiarra” deixando invisível o modelo real da arma e anexando ao ped objetos quaisquer que tiveram seu modelo substituído por alguma arma, ou seja, na verdade a arma personalizada pode ser uma pizza (objeto) que foi grudado na sua mão. Com armas até que é viável, já com carros usando tal técnica seria um negócio bem feioso, pois perderia interação... a lataria não danificaria, o pneu não rodaria, a porta não abriria e etc. -
Como ter 2 carros diferentes na mesma dff ao mesmo tempo
[M]ister replied to Tec's topic in Programação em Lua
O título pelo mesmo fica claro que é ao menos dois com a mesma .dff De qualquer modo, não tem como um player visualizar diferentes modelos/texturas num mesmo veículo. Em relação a sirene em outras motos, pode-se criar algum script de sirene personalizada, visto que addVehicleSirens não funciona com motos. -
Como ter 2 carros diferentes na mesma dff ao mesmo tempo
[M]ister replied to Tec's topic in Programação em Lua
txd = engineLoadTXD ( "pmerj.txd" ) engineImportTXD ( txd, 522 ) txd = engineLoadTXD ( "pmesp.txd" ) engineImportTXD ( txd, 521 ) txd = engineLoadTXD ( "detran.txd" ) engineImportTXD ( txd, 461 ) dff = engineLoadDFF ( "model.dff" ) engineReplaceModel ( dff, 522 ) engineReplaceModel ( dff, 521 ) engineReplaceModel ( dff, 461 ) Desse modo, eu teria três motos com o modelo igual, porém com a textura diferente (as texturas devem ser compatíveis com o modelo). -
Uma boa também é usar resourceRoot no lugar de root, assim aciona a função apenas para elementos pertencentes ao mesmo resource, evitando com isso chamadas desnecessárias por elementos de outros resources.
-
API: https://vp9lluyksc.execute-api.sa-east-1.amazonaws.com/dev/mtasa?ip=127.0.0.1&port=22003 Pode usar por enquanto, mas o ideal é você buscar algo próprio seguindo o caminho informado pelo DNL291, pois depender de terceiros (ainda mais em serviços free) você não tem garantia de segurança, estabilidade, etc.
-
Daquele jeito nunca irá mostrar a 1ª mensagem e também não foi definido condição de parada do timer (vai acessar posições indevidas do array). tMensagems = 1 -- TEMPO cont = 0 MensagensInfo = { "Falta 10 Minutos para acabar o Roud.", "Falta 9 Minutos para acabar o Roud.", "Falta 8 Minutos para acabar o Roud.", "Falta 7 Minutos para acabar o Roud.", "Falta 6 Minutos para acabar o Roud.", "Falta 5 Minutos para acabar o Roud.", "Falta 4 Minutos para acabar o Roud.", "Falta 3 Minutos para acabar o Roud.", "Falta 2 Minutos para acabar o Roud.", "Falta 1 Minutos para acabar o Roud.", "Roud Finalizado. X1 de Costas Será iniciado!", } setTimer(function ( ) cont = cont +1 outputChatBox ('#FF0000[INFO]: #FFFFFF'..MensagensInfo[cont] ,getRootElement(),255,255,255,true) end, tMensagems * 60000 , #MensagensInfo)
-
Infelizmente para esses casos deve-se recorrer a alguma aplicação externa, seja gratuita ou paga, que dai basta efetuar uma simples chamada com fetchRemote que a aplicação cuida do resto. Na wiki do fetchRemote tem até um exemplo de envio de e-mail. Alguns sites que prestam esses serviços: E-mail: mailgun | sendgrid | mailtrap SMS: twilio, e vários outros por ai... O envio de e-mail é mais viável, podendo inclusive criar seu próprio servidor SMTP responsável por enviar os e-mails, e dai não precisar criar essa dependência com aplicações externas. Caso não queira muito trabalho na configuração dos servidores SMTP+HTTP, pode alugar alguma hospedagem web, que no caso já terá esses serviços, além de possibilitar ações além do envio de e-mail, usando talvez PHP-SDK / Node.js-SDK Já com SMS é mais complicado e custoso, visto as taxas das operadoras e etc… não optaria tal uso nesse caso.
-
O ponto forte do uso de SMS/E-mail seria notificar o autor sobre as utilizações (ativações) trazendo por exemplo, qual IP ativou o resource, e com isso ser possível detectar casos de vazamento/roubo. Mas a segurança do resource em si (bloqueando utilizações indevidas), já seria o suficiente através do IP, pois o uso de SMS/E-mail para requisitar autorização de ativação se enquadraria mais como luxo, visto que o IP já é um dado que temos e é capaz de efetuar a autenticação através dele, sendo ainda que a utilização desses passos adicionais (gerar um código → enviar e-mail com o código → efetuar ação no e-mail → liberar ativação do resource) para autenticação, podem inclusive tornar o sistema mais vulnerável. Então acho que o ideal seria validar através do IP e caso o IP seja diferente do esperado, comunicasse o autor do resource de alguma forma.
-
E com guiCreateStaticImage ? Particularmente acho esse processo de conversão custoso, a quantidade de dados transferidos seria algo considerável, e a mudança de formato não garante a segurança do dado, você basicamente está mudando o cabeçalho do arquivo e evitando a leitura por algumas aplicações, mas o corpo, o conteúdo em si, é o mesmo. Se não me engano, o fetchRemote tem um limite de dados para transferência, então dependendo do arquivo essa técnica não servirá. Acho que algo localmente, usando talvez base64 juntamente com alguma criptografia seria mais eficaz e seguro.
-
Pelo que eu entendi, o site converte o formato do arquivo. Não sei como o MTA consegue carregar corretamente tal arquivo ao realizar essa “fake” mudança de formato... ou você fica efetuando o processo inverso ?