[M]ister

Members
  • Content Count

    428
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by [M]ister

  1. Como mencionei, não vai influenciar no funcionamento do script, mas seria bom ajustar isso...
  2. Adicione o bind também no player que entrar no servidor: onPlayerJoin Isso: "motoronagora" or "motoroffagora" apesar de funcionar, não é uma lógica correta, pois para o computador ambos são valores válidos (verdadeiros) o que torna o uso do or indiferente. Ali ele sempre vai utilizar o "motoronagora" pelo simples fato de estar mais à esquerda e não por uma comparação lógica.
  3. http://crystalmv.net84.net:80/pages/scripts/npc_hlc.php
  4. playerBlips = { } function oi () for index,value in ipairs(getElementsByType("player")) do if( playerBlips [ value ] ) then destroyElement( playerBlips[ value ] ) playerBlips [ value ] = nil end playerBlips[ value ] = createBlipAttachedTo ( value, 0,2,130,10,230) setElementVisibleTo(playerBlips[value],getRootElement( ),false) if (getPlayerTeam(value)) then for _, p in ipairs(getPlayersInTeam(getPlayerTeam(value))) do setElementVisibleTo(playerBlips[value],p,true) end end end end addEventHandler("onElementModelChange",getRootElement(),oi)
  5. Sim. Recomendo que você de uma estudada em lógica de programação, pois isso é um dos conceitos mais básicos.... Você pode sim aprender pela tentativa e erro (como agora), mas o tempo gasto para aprender vai ser bem maior, antes 50 minutos estudando, do que 2 horas quebrando a cabeça.
  6. function DeltaACL() local accountName = getAccountName(getPlayerAccount(client)) if isObjectInACLGroup("user."..accountName, aclGetGroup("FT")) then triggerClientEvent(client, "openDx", resourceRoot) end end addEvent("Delta:VACL", true) addEventHandler("Delta:VACL", resourceRoot, DeltaACL) function DeltaAbrir(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if button == "left" and state == "down" then if clickedElement then if (getElementType(clickedElement) == "player") then local x, y, z = getElementPosition(localPlayer) local px, py, pz = getElementPosition(clickedElement) local distance = getDistanceBetweenPoints3D(x, y, z, px, py, pz) if distance <= 3 then triggerServerEvent("Delta:VACL", resourceRoot) playerName = getPlayerName(clickedElement):gsub("#%x%x%x%x%x%x", "") end playerClicked = clickedElement end end end end addEventHandler("onClientClick", root, DeltaAbrir) addEvent("openDx", true) addEventHandler("openDx", resourceRoot, function() if not isEventHandlerAdded("onClientRender", root, DeltaDX) then addEventHandler("onClientRender", root, DeltaDX) DX = true end end )
  7. Faltou um resete no array, daquele jeito só vai acumulando os valores a cada execução... um simples: equipes = {} na linha 3 já resolve.
  8. local equipes = {} setTimer(function() if (#getElementsByType("team") > 0) then for _, team in ipairs(getElementsByType("team")) do table.insert(equipes,{nome = getTeamName(team),membros = countPlayersInTeam(team)}) end table.sort(equipes, function(a,b) return a.membros > b.membros end) if (equipes[1].membros > 0) then outputChatBox("Maior equipe: "..equipes[1].nome.." - "..equipes[1].membros.." membro(s)") end end end,5000,0)
  9. 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.
  10. https://forum.mtasa.com/search/?q=download&type=forums_topic&nodes=127 Você quem escolhe, pois dá para fazer nos dois.
  11. 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
  12. 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á.
  13. 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)
  14. 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 )
  15. 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
  16. 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
  17. 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.
  18. 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 )
  19. Lá na última linha tá destroyElement, troque por DestroyMarker (confundi quando reescrevi o trecho)
  20. 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.
  21. 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
  22. 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.
  23. 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.
  24. 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.
  25. 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.