-
Posts
3,992 -
Joined
-
Last visited
-
Days Won
183
Everything posted by Lord Henry
-
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.
-
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
-
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.
-
Sim é possível. Veja como é feito neste resource antigo de taxista: https://community.multitheftauto.com/index.php?p=resources&s=details&id=14561
-
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.
- 1 reply
-
- 1
-
-
Está faltando o evento onClientMarkerHit. Além disso, na sua linha 11, vc escreveu hitPlayer errado.
-
Meu mapmanager esta bugado
Lord Henry replied to V1RU5's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Ou então apenas adicione o objeto resource.Mapmanager na ACL Group Admin. -
Erro no meu script [Mecanico]
Lord Henry replied to EduardoMega's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
É. 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. -
Erro no meu script [Mecanico]
Lord Henry replied to EduardoMega's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Use sver no F8 e nos diga o que aparece. Mostre também o meta.xml do resource Mecanico. -
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.
-
A outra é câmera cinematográfica que fica girando ao redor de um objeto. Vc usa onClientPreRender com setCameraMatrix.
-
Pode ser. Pois também achei estranho ele sempre retornar nil.
-
setCameraShakeLevel É isso?
-
Se refere a aquele efeito de câmera bêbado? Ou se refere a movimentar a câmera orbitando um objeto?
-
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.
-
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
-
Delete e reescreva a linha 8 em vez de copiar do fórum. Vc copiou um símbolo invisível.
-
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)
-
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.
-
getCursorPosition retorna false quando o cursor não está visível. Antes da linha 2, coloque isso: if (not isCursorShowing ()) then return end
-
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:
-
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
-
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:
-
@EduardoMega não reviva tópicos antigos. Da próxima vez crie seu próprio tópico.