Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,992
  • Joined

  • Last visited

  • Days Won

    183

Everything posted by Lord Henry

  1. Baixe um programa chamado IMG Tools, depois vá na pasta de instalação do seu GTA SA na pasta Models. Copie o arquivo gta_int.img para uma pasta segura, depois abra-o com esse programa e exporte todos os arquivos DFF dele. Depois vc precisa descobrir qual arquivo é do interior que você quer. Descobrindo qual deles é do interior que você quer, abra-o em um programa de modelagem 3D e altere-o como quiser. Depois de concluir a alteração, exporte o arquivo de volta em DFF e mova-o pra dentro do seu resource no MTA. Você pode carregá-lo com engineLoadDFF e engineReplaceModel.
  2. Você pode criar uma table e definir a posição da máscara em cada ID de skin. Exemplo: maskTable = { [0] = {offX, offY, offZ}, -- Substitua pela coordenada que a máscara vai ficar anexada na skin do CJ. [1] = {offX, offY, offZ}, -- Mesma coisa pra skin 1. E assim por diante. } masks = {} -- Onde as máscaras de cada player vão ficar. -- Depois pra anexar a máscara no jogador: function anexarMask (thePlayer) local id = getElementModel (thePlayer) -- Se o cara estiver usando a skin do CJ, id = 0. if (maskTable[id] == nil) then -- Se essa skin não existe na table, então: outputChatBox ("Sua skin não tem máscara.", thePlayer) else local x, y, z = unpack (maskTable[id]) -- x, y, z recebem offX, offY, offZ do [id] da table. local px, py, pz = getElementPosition (thePlayer) masks[thePlayer] = createObject (??, px, py, pz, 0, 0, 0, true) -- Cria a máscara na posição do jogador. Coloque o ID do objeto no lugar do ?? attachElements (masks[thePlayer], thePlayer, x, y, z) -- Anexa a máscara no jogador, usando os offsets configurados na table. end end
  3. function Render() if (getElementDimension (localPlayer) == 5) and (getElementInterior (localPlayer) == 10) then -- Substitua o 5 e o 10 pela dimensão e interior respectivamente. for _, Data in pairs( bInfos ) do local fPosX, fPosY, fPosZ = getElementPosition( localPlayer ); local fDataX, fDataY, fDataZ = unpack( Data.vecPos ); local fDistanceBetweenPoints = getDistanceBetweenPoints3D ( fPosX, fPosY, fPosZ,fDataX, fDataY, fDataZ ); local fInputDistance = Data.fDistance or 20; if fDistanceBetweenPoints < fInputDistance then local fCameraX, fCameraY, fCameraZ = getCameraMatrix(); local fWorldPosX, fWorldPosY = getScreenFromWorldPosition( fDataX, fDataY, fDataZ + 1, fInputDistance ); local bHit = processLineOfSight( fCameraX, fCameraY, fCameraZ, fDataX, fDataY, fDataZ, true, false, false, true, false, false, false, false ); if not bHit then if fWorldPosX and fWorldPosY then dxDrawText( Data.sText, fWorldPosX, fWorldPosY, fWorldPosX, fWorldPosY, Data.iColor, Data.fScale, Data.sFont ); end end end end end end addEventHandler ("onClientRender", root, Render) Só fazer assim.
  4. Sim é possível. Veja como é feito neste resource antigo de taxista: https://community.multitheftauto.com/index.php?p=resources&s=details&id=14561
  5. Faz todos os objetos serem LowLOD. Assim eles podem ser vistos a uma distância maior. No entanto eles perderão a colisão. Pra arrumar isso, duplique o mapa com objetos normais e deixe-os invisíveis.
  6. Está faltando o evento onClientMarkerHit. Além disso, na sua linha 11, vc escreveu hitPlayer errado.
  7. Ou então apenas adicione o objeto resource.Mapmanager na ACL Group Admin.
  8. É. Seu servidor está antigo demais. Os caras da host te tapearam. Sobre seu meta, parece estar tudo certo. Mas da próxima vez, utilize o botão <> do fórum e selecione XML pra postar o meta.
  9. Use sver no F8 e nos diga o que aparece. Mostre também o meta.xml do resource Mecanico.
  10. Da próxima vez, utilize a formatação de código clicando no botão <> em vez de colar o código direto no texto. Na sua linha 29, troque "Milicia" por GroupName. Da mesma forma que foi feito na linha 79.
  11. A outra é câmera cinematográfica que fica girando ao redor de um objeto. Vc usa onClientPreRender com setCameraMatrix.
  12. Pode ser. Pois também achei estranho ele sempre retornar nil.
  13. Se refere a aquele efeito de câmera bêbado? Ou se refere a movimentar a câmera orbitando um objeto?
  14. Se o script for client-side, então: Cria uma variável qualquer com valor false. Fora da função. Quando o jogador executa o comando, verifica se a variável é true ou não. Se for true, então: Manda outputChatBox dizendo pra esperar pra usar o comando. Se não for true, então: Faz a variável ficar true. Executa o código que tem que ser executado. Inicia um setTimer de 5 segundos pra fazer a variável voltar pra false. Se o script for server-side, então: Cria uma table qualquer vazia. Fora da função. Será usada pra armazenar os timers dos jogadores. Quando o jogador executa o comando, verifica se existe a variável da table indexada nele ou não. Se a table indexada no jogador for igual a nil, então: Executa o código que tem que ser executado. Cria a variável da table indexada no jogador, ex: tableQualquer[thePlayer] = setTimer... Na variável da table indexada no jogador, inicia um setTimer de 5 segundos pra anular a variável indexada no jogador. tableQualquer[thePlayer] = nil Se a table indexada no jogador não for nil, então: Manda outputChatBox dizendo pra esperar pra usar o comando. Em outra função, se o jogador sair do servidor (onPlayerQuit), então: Verifica se o timer da variável da table indexada no jogador existe com isTimer. Se o timer existe, então: Da killTimer nesse timer e anula a variável da table indexada no jogador. Espero ter ajudado. Eu poderia ter dado código pronto mas vc parece que nem tentou fazer.
  15. Testei essa função mas por algum motivo ela está falhando. Pois o string.find está sempre retornando nil. Fiz assim e resolveu: function removeHex (s) if type (s) == "string" then while (s ~= s:gsub ("#%x%x%x%x%x%x", "")) do s = s:gsub ("#%x%x%x%x%x%x", "") end end return s or false end
  16. Delete e reescreva a linha 8 em vez de copiar do fórum. Vc copiou um símbolo invisível.
  17. Não precisa ser coordenada exata. Use no máximo 3 decimais. Mais que isso é irrelevante. Tente isso: theMarker = createMarker (2796.071, -2373.505, 13.631, "cylinder", 1) function markerPanel (hitPlayer, matchingDimension) if (hitPlayer == localPlayer) then addEventHandler("onClientRender", root, renderPanel) render = true showCursor(true) end end addEventHandler ("onClientMarkerHit", theMarker, markerPanel)
  18. Cara, isso é relativamente complexo de ser feito. Pois além do painel, você vai precisar adaptar todos os mods de veículos para que funcionem em conjunto com o painel. Já vou logo adiantando que vc vai precisar de triggerEvent, triggerServerEvent e triggerClientEvent. Além de funções para verificar se tal resource está funcionando ou não, receber de alguma forma o status do veículo (pois o mod pode estar ligado mas o veículo desativado) para que o painel possa ler. Nome do veículo, salvar os veículos ativos na conta do jogador, etc. No seu lugar eu estudaria mais antes de tentar ir por esse caminho.
  19. getCursorPosition retorna false quando o cursor não está visível. Antes da linha 2, coloque isso: if (not isCursorShowing ()) then return end
  20. No scoreboard, só acessar as configurações dele pelo painel admin e mudar o parâmetro Allow colorcoded names para false. No chat, vc deve cancelar o envio normal das mensagens e reenviá-las sem o parâmetro colorcoded (aquele true que vem depois dos 255). Se você estiver com um resource de TAGs, faça a correção nele. Se não tiver um resource de TAGs, crie um resource novo com um server.Lua e coloque isso nele: function chatbox (text, msgtype) local name = getPlayerName (source) if (msgtype == 0) then cancelEvent (true) -- Cancela a mensagem original. outputChatBox (name..": "..text, root, 231, 217, 176) -- Reenvia a mensagem sem cores. (vai aparecer os códigos de cor em vez disso) outputServerLog ("CHAT: "..name..": "..text) end end No killmessages dai é mais complexo, pois ele vem nativamente bugado. Substitua o script inteiro do textlib.Lua por esse:
  21. Substitua aquela linha 10 por isso: local allowed = {"DM", "Moderador", "SuperModerator", "Admin"} -- Lista de ACL Groups que a mensagem vai aparecer. for i, jogador in ipairs (getElementsByType ("player")) do -- Para cada jogador do servidor, faça: for k, accN in ipairs (allowed) do -- Para cada string da table allowed, faça: if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount(jogador)), aclGetGroup(accN)) then outputChatBox ("[#4888f7FW-SETAGEM#c9c9c9]#fae7a2O #4888f7"..SetNamePlayer.." #fae7a2Setou o Player #4888f7"..nameR.." #fae7a2De Dono do Morro (DM)", jogador, 201, 201, 201, true) break end end end
  22. Dependendo do modelo da construção, a porta é separada e dai vc consegue tirar ela no editor de mapas do MTA. Sobre colocar o interior dentro da construção, vc vai precisar modificar o modelo do interior, pois eles geralmente não cabem dentro das construções. Você vai ter um trabalho absurdo que não vale a pena. Mais detalhes nesse outro tópico com mesmo assunto:
  23. @EduardoMega não reviva tópicos antigos. Da próxima vez crie seu próprio tópico.
×
×
  • Create New...