-
Posts
4,005 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
Motos são do tipo "Bike" e bicicletas são do tipo "BMX"
-
Mais fácil simplesmente verificar se o tipo de veículo é bicicleta e não diminuir o combustível neles. getVehicleType
-
Quero Achar Um Script De Arrastar Player!
Lord Henry replied to SrKingFox's topic in Programação em Lua
Você pode simplesmente anexar o jogador no membro da Staff usando attachElements. -
estou a procura de um painel p traduzido
Lord Henry replied to SrKingFox's topic in Programação em Lua
Traduza você mesmo.- 1 reply
-
- 1
-
-
Sim, mostre somente pra quem permissão de mutar jogadores. (Staffs) Você pode verificar isso com hasObjectPermissionTo. Obs: Server-side.
-
Mais fácil simplesmente colocar uma condição no onClientRender que verifica a distância entre o player e o item. Se a distância entre eles for menor ou igual a tanto, desenha o texto na tela. GetDistanceBetweenPoints3D function renderText () local px, py, pz = getElementPosition (localPlayer) local ix, iy, iz = getElementPosition (item) -- Supondo que item exista. if (getDistanceBetweenPoints3D (px, py, pz, ix, iy, iz) <= 10) then -- Se a distância entre o player e o item for menor ou igual a 10, então: dxDrawText ("Texto", 0, 0) -- Apenas teste. end end addEventHandler ("onClientRender", root, renderText)
-
Cadê o código para analisarmos onde está o erro? Qual o erro que aparece? Você sabe que precisa segurar a tecla Z para liberar o microfone, né? E que a função de voice precisa estar habilitada no mtaserver.conf do servidor.
-
Erro nos triggerClientEvent/triggerServerEvent
Lord Henry replied to RubyTheG0d's topic in Programação em Lua
Erro na linha 52. Faltou abrir parênteses. -
Apesar de funcionando, o código ainda estaria errado. Pois em client-side, o addCommandHandler não recebe thePlayer como primeiro parâmetro de função e sim o cmd. client-side: addCommandHandler ("discord", function (cmd) local discord = "discord.gg/" setClipboard (discord) outputChatBox ("Link do discord copiado automaticamente use ctrl + v para colar", 0, 255, 0) end)
-
│Ayuda│ Iconos flotantes y skin selector con skin
Lord Henry replied to ullll0a's topic in Scripting
Not portuguese. Topic moved to Spanish Scripting Section. -
[Duvida/Ajuda] LevelSystem por minutos
Lord Henry replied to virgingod's topic in Programação em Lua
Não há problemas em pedir ajuda para arrumar mods da internet. Só não damos suporte para mods roubados/vazados. -
Fiz um básico aqui pra vc testar. Server-side: local greenzones = { {2441.173, -1721.99, 1, 130, 120, 100}, -- Grove Street {304.336, -1836.197, 1, 130, 120, 100}, -- Praia Los Santos {1154.833, -1385.175, 1, 70, 100, 115}, -- Los Santos Hospital } local colShapes = {} addEventHandler ("onResourceStart", resourceRoot, function () for i, v in ipairs (greenzones) do colShapes[i] = createColCuboid (v[1], v[2], v[3], v[4], v[5], v[6]) createRadarArea (v[1], v[2], v[4], v[5], 0, 255, 0, 150) addEventHandler ("onColShapeHit", colShapes[i], function (hitElement) if (getElementType (hitElement) == "player") then setElementData (hitElement, "greenzone", true) outputChatBox ("Você está protegido na zona verde.", hitElement) elseif (getElementType (hitElement) == "vehicle") then setVehicleDamageProof (hitElement, true) end end) addEventHandler ("onColShapeLeave", colShapes[i], function (leaveElement) if (getElementType (leaveElement) == "player") then setElementData (leaveElement, "greenzone", false) outputChatBox ("Você não está mais protegido.", leaveElement) elseif (getElementType (leaveElement) == "vehicle") then setVehicleDamageProof (leaveElement, false) end end) end end) Client-side: (copiei o seu e arrumei a última função) -- Protect greenzone'd players from getting attacked etcetera function onDamage() if getElementData(source, "greenzone") then cancelEvent() end end addEventHandler("onClientPlayerDamage", localPlayer, onDamage) -- Prevent people from being knifed while in greenzone function onStealthKill(target) if getElementData(target, "greenzone") then cancelEvent() end end addEventHandler("onClientPlayerStealthKill", localPlayer, onStealthKill) -- Render the "Greenzone protected" text above their heads function renderGreenzoneTag() local streamedPlayers = getElementsByType("player", root, true) if streamedPlayers and #streamedPlayers ~= 0 then local lpos = {getElementPosition(localPlayer)} for _, p in ipairs(streamedPlayers) do if p and isElement(p) then if getElementData(p, "greenzone") then local ppos = {getElementPosition(p)} if getDistanceBetweenPoints3D(lpos[1], lpos[2], lpos[3], ppos[1], ppos[2], ppos[3]) <= 20 then local x, y = getScreenFromWorldPosition(ppos[1], ppos[2], ppos[3] + 1.2) if x and y then dxDrawText("Voce esta protegido", x + 1, y + 1, x, y, tocolor(0, 0, 0), 0.5, "bankgothic", "center") dxDrawText("Voce esta protegido", x, y, x, y, tocolor(0, 220, 0), 0.5, "bankgothic", "center") end end end end end end end addEventHandler("onClientRender", root, renderGreenzoneTag) -- The next 4 functions are for ghostmode (vehicles ramming greenzone'd players on foot, lifting them off, etcetera) -- This protection is important; they usually try to forklift you out of greenzone, spawn a vehicle on you and catch you inside/annoy-ram you, then TP off to a clear zone to kill you, etcetera. function onStreamIn() if not getElementData(localPlayer, "greenzone") then return end if getElementType(source) == "vehicle" then setElementCollidableWith(localPlayer, source, false) end end addEventHandler("onClientElementStreamIn", root, onStreamIn) function cleanUp() if not getElementData(source, "greenzoneveh") then return end if getElementType(source) == "vehicle" and isElementCollidableWith(localPlayer, source) == false then setElementCollidableWith(localPlayer, source, true) end end addEventHandler("onClientElementStreamOut", resourceRoot, cleanUp) function enterGreenzone() local x, y, z = getElementPosition(localPlayer) local nearbyVehicles = getElementsWithinRange(x, y, z, 300, "vehicle") for i, v in ipairs(nearbyVehicles) do setElementCollidableWith(localPlayer, v, false) end end addEvent("onEnterGreenzone", true) addEventHandler("onEnterGreenzone", localPlayer, enterGreenzone) function leaveGreenzone(p) local x, y, z = getElementPosition(localPlayer) local nearbyVehicles = getElementsWithinRange(x, y, z, 300, "vehicle") for i, v in ipairs(nearbyVehicles) do setElementCollidableWith(localPlayer, v, true) end end addEvent("onLeaveGreenzone", true) addEventHandler("onLeaveGreenzone", localPlayer, leaveGreenzone) -- This 'bug' is not expected to happen without some sort of interference, but is a generic safeguard. -- If player exits the greenzone after incidentally having the bugfix applied to them, all controls will be automatically re-enabled anyways (that mechanism is in serverside). function antiGreenzoneBug() if getElementData(localPlayer, "greenzone") then setPedWeaponSlot (localPlayer, 0) toggleControl("fire", false) toggleControl("action", false) toggleControl("aim_weapon", false) toggleControl("vehicle_fire", false) toggleControl("vehicle_secondary_fire", false) end end addEventHandler("onClientPlayerWeaponFire", localPlayer, antiGreenzoneBug)
-
Regras do fórum:
-
Comece postando na formatação adequada seu código:
-
setVehicleDamageProof enquanto estiver dentro da zona verde.
-
Provavelmente tirou o Painel Admin da ACL Group Admin e ele perdeu acesso a todas as funções que precisam de acesso admin. Também ocorre se tirar a ACL Admin do grupo Admin. Dai o painel ainda está no grupo Admin, mas o grupo Admin não tem mais as permissões admin.
-
Problema de desempenho
Lord Henry replied to Gaimo's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Ocorre também no GTA Offline? Se vc ir pra essa área no modo história. -
Então vc veio do SAMP. Excelente, vc já deve saber como o GTA SA funciona mais do que um jogador comum saberia. Seja muito bem-vindo ao Multi Theft Auto. De cara, vou lhe passar alguns links importantes: Regras deste fórum (caso ainda não tenha visto): Página inicial da Wiki do MTA (acesse os links de Scripting): https://wiki.multitheftauto.com/wiki/Página_Inicial Na Wiki vc aprende sobre as funções usadas pelo MTA, por exemplo o createVehicle que serve para criar um veículo tal, numa coordenada tal. Mas tenha em mente que pouquíssimas páginas estão disponíveis em português. É necessário conhecimento intermediário em inglês para entender (assim como qualquer coisa relacionada a tecnologia, sem inglês vc não vai longe). Também na Wiki existem exemplos mostrando como usar determinada função, seus parâmetros e a sintaxe dela. Uma coisa que vc vai perceber logo de cara de diferença quanto ao SAMP, é que aqui as funções estão separadas em tipo client, shared e server. As funções client só funcionam em scripts client-side. Elas afetam somente o cliente do jogador, nunca o servidor. Por exemplo: Funções que criam elementos de menu, são client-side. Funções que verificam a conta dos jogadores, são server-side. Funções de cálculos, geralmente são shared e funcionam em ambos os tipos de script. Isso está explicado nos links da Wiki. A primeira dica que eu dou pra quem está começando no MTA mas já sabe programar, é baixar resources (mods) gratuitos e descompilados do site da comunidade do MTA e estudar como eles funcionam. Experimente resources bem simples primeiro. A segunda dica é comentar cada linha dos códigos. (Em Lua, use dois traços para iniciar um comentário. function qualquerCoisa (thePlayer, cmd) -- Início de função, sendo thePlayer o parâmetro de função e cmd o segundo parâmetro de função. if (cmd == "teste") then -- Se o comando utilizado para ativar essa função for /teste então: outputChatBox ("Comando teste executado.") else outputChatBox ("Comando teste falhou.") end -- Finaliza e fecha o escopo da condição. end -- Finaliza e fecha o escopo da função. addCommandHandler ("teste", qualquerCoisa) -- Adiciona um comando /teste para ativar a função qualquerCoisa. --[[ Isso é um Bloco de comentários. O código acima funciona tanto em scripts server-side quanto em client-side. ]] Busque sempre comentar cada linha dos seus scripts, assim vc sabe exatamente pra que serve cada linha e o que está acontecendo nela. Outra coisa importante, indente sempre seus códigos. Não faça um texto ilegível onde vc mesmo se perde e não sabe onde uma coisa começa e onde termina. Se você é novato, busque primeiro deixar seu resource funcionando. Depois você se preocupa em otimizá-lo. Scripters avançados já fazem otimizando direto, mas é necessário conhecimento para isso. Não tente "dar um passo maior do que sua perna". Como mencionado anteriormente, crie um servidor local para começar a testar seus códigos lá. Tutorial de como criar um servidor local também está naqueles links. Nossa comunidade está aqui para ajudar e não para programar para você. Se tiver dúvidas enquanto está tentando criar seu script, podemos ajudá-lo a resolver os erros ou apontar falhas de lógica, podemos até mostrar a parte corrigida. Vale lembrar que não damos suporte para scripts roubados de terceiros, crie seus próprios. Sobre a parte de projetos em si: Na pasta do MTA, em server\mods\deathmatch\resources você tem algumas pastas por padrão. As pastas que estão entre colchetes indicam ao MTA que os resources estão dentro dela e não que ela é um resource em si. Se vc criar uma pasta sem colchetes, o MTA vai considerá-la como um resource. Normalmente os donos de servidores colocam os resources tudo de qualquer jeito ali e vira uma bagunça. Mas no meu caso, eu deixo os mods separados naquelas [pastas] e inclusive criei outras como [vehicles] [maps]. Também criei uma pasta de estudos. Eu crio um resource com nome teste e só movo ele posteriormente para uma [pasta] adequada somente se eu termino de desenvolver ele e de corrigir seus erros. As vezes acontece de eu desistir de finalizá-lo pois ele se tornou complexo demais ou muito pesado ou simplesmente seu objetivo exige algo que está além da capacidade do GTA. Nesses casos, dou um nome para o resource mas ele continua na pasta de estudos.
-
Ideia legal. Quando eu recuperar meu notebook eu tentarei resolver.
-
Error o menu não aparece e da esse error.
Lord Henry replied to murilo2929's topic in Programação em Lua
Na verdade o erro aponta que amount é booleano. (false ou true) -
Por isso que sugeri usar objetos invisíveis para animar a câmera, pois é mais fácil entender a lógica do que está acontecendo. O interpolateBetween é meio complicadinho de entender. Sem contar que você vai precisar de 2 simultaneamente, pois cada interpolate só é capaz de interpolar até 3 variáveis, mas a câmera exige 6. A não ser, é claro, que você use posição de target da câmera como fixa e interpole somente a posição dela, mantendo sempre a mesma posição pra onde ela está apontada. Dai sim apenas 1 interpolateBetween já serve.
-
Isso ocorre pois vc não declarou player em lugar nenhum. Então vc está basicamente tentando teleportar nulo para dentro do veículo. Tenha em mente que veículos criados client-side servem apenas como decoração. Eles não funcionam. (Leia na Wiki do createVehicle) Ou seja, daria erro mesmo se vc usasse localPlayer ali no warp. A solução do problema é simples, mas vai resultar em problemas posteriormente, tornando a solução no fim das contas um pouco complexa. 1) Passe o script para o server-side. (Mude o lado dele no meta.xml) 2) Adicione o parâmetro de função thePlayer, exigido pelo addCommandHandler no server-side. 3) Use thePlayer em vez de localPlayer. Vai ficar assim o script: function SpawnMoto (thePlayer) local px, py, pz = getElementPosition (thePlayer) local VehCar = createVehicle (522, px, py, pz+2) warpPedIntoVehicle (thePlayer, VehCar) end addCommandHandler ("moto", SpawnMoto) Isso resolve seu problema de erros no debug. Mas logo vc vai perceber que o jogador pode ficar criando infinitos veículos. O que vc precisa fazer é deletar o veículo criado anteriormente antes de criar um novo. Mas vc não pode simplesmente dar destroyElement no VehCar. Primeiramente pois ele não existe fora do escopo daquela função, por estar numa variável local. E se você torná-la global, irá influenciar nos veículos criados por outros jogadores, uma vez que VehCar será o veículo criado pela última vez e não o necessariamente o veículo criado por você. Para corrigir isso, devemos identificar quais veículos pertencem a cada jogador para que assim possamos verificar se este jogador já tem um veículo criado antes ou não. Façamos isso por meio de uma table que será indexada com os jogadores. 1) Crie uma table vazia. 2) Na função SpawnMoto, verifique se já existe um item na tabela com o thePlayer como índice. 3) Condição: Se já existir um item com thePlayer como índice, destrói esse item e anula sua variável. 4) Substitua os VehCar por motos[thePlayer] e deixe como sendo global e não como local. O código vai ficar assim: motos = {} function SpawnMoto (thePlayer) local px, py, pz = getElementPosition (thePlayer) if (isElement (motos[thePlayer])) then destroyElement (motos[thePlayer]) motos[thePlayer] = nil end motos[thePlayer] = createVehicle (522, px, py, pz+2) warpPedIntoVehicle (thePlayer, motos[thePlayer]) end addCommandHandler ("moto", SpawnMoto) Isso fará com que os jogadores só possam criar 1 moto por vez. Ao usar o comando novamente, ele vai destruir a moto criada anteriormente e criar a nova no lugar. Ainda tem a questão de segurança, você vai precisar destruir a moto e anular sua variável caso o jogador desconecte do servidor, pois ao voltar, ele será outro elemento e sua moto permanecerá no mapa. Mas dai essa parte é com você. Obs: Postagem feita via mobile.
-
Primeiramente, vc sabe programar em Lua? Segundamente, vc sabe criar um servidor local para testar seus scripts? Sua dúvida é muito interessante e bem válida. A maioria não se interessa por esse detalhe e já querem sair fazendo scripts logo de cara, resultando em scripts horríveis, bugados e nada otimizados. Se sua resposta for positiva para minhas duas perguntas, dai sim poderei responder a sua dúvida.
-
Se não sabe nada de programação, sugiro que comece a estudar lógica de programação. Tutorial:
-
Eu to ligado no que vcs estão fazendo. Interpolar a posição da câmera em vez de usar objetos em movimento.