-
Posts
3,992 -
Joined
-
Last visited
-
Days Won
183
Everything posted by Lord Henry
-
Não é necessário usar a verificação isElementWithinMarker quando vc está no evento onMarkerHit. Em vez de usar uma variável que não existe, como objeto. Verifique se o objeto criado é um elemento ou não. O_M = createObject (615, -1668.99609375, -2233.56640625, 34.166400909424 -1) M_O = createMarker (-1639.974609375, -2245.53515625, 31.4765625 -1, "cylinder", 1.5, 20, 70, 230, 95 ) function Inicio (hitElement) -- Não se usa source como parâmetro de função. if isElement(O_M) then -- Se o objeto que está na variável O_M existe, então: destroyElement(O_M) -- Destrói o objeto. O_M = nil -- É necessário anular a variável do objeto após destruí-lo. end end addEventHandler ("onMarkerHit", M_O, Inicio)
-
Se refere a animações dos personagens? Ou uma animação de interface?
-
function teste (enteringPlayer, seat, jacked, door) -- source = veículo setTimer (function () print (getElementModel(enteringPlayer)) -- enteringPlayer ainda existe. Mas o source do evento não. print (getElementModel(source)) -- ERRO: source = nil end, 100, 1) end addEventHandler ("onVehicleStartEnter", getRootElement(), teste)
-
Se o objeto for criado client-side. Vc deverá ativar a função que cria ele em todos os clientes por meio de um triggerClientEvent que inicia em um script server-side. (acho que vc não entendeu pq usei termos técnicos demais, então vou explicar de outra forma) Se o objeto estiver criado somente no MTA do jogador e não no servidor, vc vai precisar criá-lo em todos os MTAs de todos os jogadores (clientes). Em geral objetos que devem ser vistos por todos os jogadores são criados direto no server, assim todos os clientes irão vê-lo. No caso de roupas, são coisas que só funcionam nos clientes e não no servidor, dai vc precisa de uma função no servidor para ativar essas roupas em todos os clientes.
-
Teste isso então: function teste (enteringPlayer, seat, jacked, door) -- source = veículo setTimer (function () print (getElementModel(source)) -- ERRO: source = nil end, 100, 1) end addEventHandler ("onVehicleStartEnter", getRootElement(), teste) function teste (enteringPlayer, seat, jacked, door) -- source = veículo -- setTimer (function () print (getElementModel(source)) -- source = veículo -- end, 100, 1) end addEventHandler ("onVehicleStartEnter", getRootElement(), teste) No caso me equivoquei quando eu disse parâmetro de função. Na verdade só perde se for source de evento.
-
Putz, estão doando scripts por aqui que eu ajudei a desenvolver... que pena. Como se trata de seu primeiro post, você talvez não saiba a formatação correta que se deve utilizar em nosso fórum. Recomendo que veja este post e saiba de tudo: Um abraço e boa sorte.
-
Não quando a variável é parâmetro de função, ela só funciona dentro dela mesma. Por isso é necessário passar o source para a função do setTimer, pois naturalmente ela não vai funcionar. Ou então vc coloca o source em uma variável local e dai usa essa variável local dentro da função do setTimer, que por estar dentro do escopo da função principal, dai funciona.
-
O erro acontece pois dentro do setTimer, o source deixa de existir. Pois ele pertence somente à função principal e no setTimer é outra função.
-
Comece pelo dicionário mesmo.
-
Vc já chegou a ver as regras do fórum? Se não viu, veja antes de continuar. Aprenda inglês. Tudo na área da tecnologia precisa de inglês.
-
Vc já usou /debugscript 3 para ver se há erros no script? Acabei de verificar aqui (além de erros no debugscript) que seu amigo fez a HUD numa resolução de 1920x1080. Isso significa que qualquer jogador com uma resolução menor não vai ver HUD alguma, pois ele está sendo desenhado "fora" da tela. Por isso que somente o seu amigo consegue ver, pois só ele está jogando nessa resolução alta. Peça para que ele recrie a HUD com posições relativas.
- 1 reply
-
- 1
-
-
Desligue os seguintes resources para o player não spawnar automaticamente ao entrar no server (permanecer em tela preta): freeroam play (gamemode) Obs: O player também não vai spawnar após completar o download. Vc deverá criar um resource que faça isso.
-
Não tem relação com seu erro, mas no client não se usa o evento onPlayerJoin. Pois o evento onClientResourceStart já é ativado quando o jogador entra no servidor e faz download desse resource.
-
Min Ajudem porfavor
Lord Henry replied to Ari Alves's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Eu disse reinstalar o GTA SA não o MTA. E reinstale sem mods. -
Min Ajudem porfavor
Lord Henry replied to Ari Alves's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Já tentou reinstalar o GTA SA? -
Ele está dizendo que este evento já está ativo. Isso acontece quando vc tenta dar addEventHandler em um evento que já está adicionado. Para corrigir isso, vc tem 2 alternativas: Impeça que ele tente adicionar outra vez o mesmo evento. Remova o evento antes de adicioná-lo novamente. Como vc não colocou o script completo, é só isso que dá pra afirmar.
-
Da próxima vez, poste na seção Programação em Lua.
-
Dúvida sobre ligação de resource/getElementPosition
Lord Henry replied to Teixeira's topic in Programação em Lua
Essa não é a melhor maneira de fazer isso. (até dá, mas não é o ideal) É mais recomendável você fazer isso por meio de um marker (createMarker). Então vc apenas verifica se o jogador está dentro dele ou não (IsElementWithinMarker) ao usar o comando pra teleportar. Se estiver dentro do marker, teleporta pra tal posição com setElementPosition. local teleMarker = createMarker (0, 0, 2.2, "cylinder", 1) -- Marker que o jogador deve estar dentro pra funcionar. local teleX, teleY, teleZ = 10, -20, 4 -- Posição que o teleporte vai levar. function posVerify (thePlayer) -- thePlayer = jogador que executou o comando. if isElementWithinMarker (thePlayer, teleMarker) then -- Se o jogador está dentro do marker, então: setElementPosition (thePlayer, teleX, teleY, teleZ, true) -- Teleporta o jogador para a coordenada declarada. outputChatBox ("Teleportado com sucesso.", thePlayer, 0, 255, 0) else outputChatBox ("Você não está na posição do teleporte.", thePlayer, 255, 150, 0) end end addCommandHandler ("tele", posVerify) -- Comando que o jogador usa para teleportar: /tele ==================== Se você realmente quer fazer da maneira não recomendada, que é verificando a posição do jogador, você vai precisar de uma margem de erro nas coordenadas. Pois é impossível o jogador ficar na posição exata que você quer verificar. Então você deve fazer o seguinte, exemplo: local posX, posY, posZ = 0, 0, 3 -- Posição que o jogador deve estar para que o comando funcione. local teleX, teleY, teleZ = 10, -20, 4 -- Posição que o teleporte vai levar. function posVerify (thePlayer) -- thePlayer = jogador que executou o comando. local x, y, z = getElementPosition (thePlayer) -- Vamos fazer a margem de erro pra 2 coordenadas a mais e 2 coordenadas a menos da posição exata. if x >= (posX - 2) and x <= (posX + 2) and y >= (posY - 2) and y <= (posY + 2) and z >= (posZ - 2) and z <= (posZ + 2) then -- Se o jogador está dentro da margem de erro, então: setElementPosition (thePlayer, teleX, teleY, teleZ, true) -- Teleporta o jogador para a coordenada declarada. outputChatBox ("Teleportado com sucesso.", thePlayer, 0, 255, 0) else outputChatBox ("Você não está na posição do teleporte.", thePlayer, 255, 150, 0) end end addCommandHandler ("tele", posVerify) -- Comando que o jogador usa para teleportar: /tele -
Dúvida sobre ligação de resource/getElementPosition
Lord Henry replied to Teixeira's topic in Programação em Lua
Os resources são ligados pelo meta.xml Quando você usa o include, isso faz com que o resource incluído seja iniciado junto com este resource. Para usar as funções de um resource no outro, você usa a função call (ou export, dependendo da sintaxe que vc escolher) e você deve exportar essa função no meta.xml também. Essas ligações são comuns nos resources nativos do gamemode padrão, como por exemplo o votemanager. -
A regra é clara: Sempre teste o script com /debugscript 3 ligado. Se for falta de permissão, ele vai avisar lá também.
-
Já tentou depurar o código pra ver quais partes ele ta lendo? Colocar outputChatBox pelo código.
-
Substitua as funções onPlayerWasted e onSoltarWasted por essa: function onPlayerDied(totalAmmo, killer, killerWeapon, bodypart, stealth) -- Não use nome de evento como nome de função. if isPlayerPolice(source) then local vtr = carros[source] print(vtr) -- retorna a tabela print(getElementModel(vtr)) -- da erro e retorna false if vtr and isElement(vtr) then local pregados = getAttachedElements(vtr) for _, preso in ipairs(pregados) do if preso and isElement(preso) then detachElements(preso, vtr) setPedAnimation(preso) if getElementData(preso, "navtr") then removeElementData(preso, "navtr") end removeEventHandler('onPlayerCommand', preso, onPlayerCommand) toggleAllControls(preso, true) local x,y,z = getElementPosition(preso) setElementPosition(preso,x+1.5,y+1.5,z+1) end end end end end addEventHandler("onPlayerWasted", root, onPlayerDied)
-
Use o resource ipb que já vem instalado no servidor. Ele mostra quanto cada resource está consumindo do seu servidor. Pra abrir a interface dele use /ipb
-
Sim. Se o resource não estiver compilado, abra-o e veja como funciona a função.